home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 43 / Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso / -serious- / -commercial- / warpup_v40 / warpup-warpos / docs / powerpc.doc < prev    next >
Text File  |  1999-06-14  |  144KB  |  4,223 lines

  1. TABLE OF CONTENTS
  2.  
  3. powerpc.library/AllocVec32
  4. powerpc.library/AllocXMsg
  5. powerpc.library/CausePPCInterrupt
  6. powerpc.library/CreatePPCTask
  7. powerpc.library/FreeVec32
  8. powerpc.library/FreeXMsg
  9. powerpc.library/GetCPU
  10. powerpc.library/GetPPCState
  11. powerpc.library/PowerDebugMode
  12. powerpc.library/PutXMsg
  13. powerpc.library/RunPPC
  14. powerpc.library/SPrintF68K
  15. powerpc.library/WaitForPPC
  16.  
  17. powerpc.library/AddHeadPPC
  18. powerpc.library/AddPortPPC
  19. powerpc.library/AddSemaphorePPC
  20. powerpc.library/AddTailPPC
  21. powerpc.library/AddTimePPC
  22. powerpc.library/AllocPooledPPC
  23. powerpc.library/AllocSignalPPC
  24. powerpc.library/AllocVecPPC
  25. powerpc.library/AllocXMsgPPC
  26. powerpc.library/AttemptSemaphorePPC
  27. powerpc.library/AttemptSemaphoreSharedPPC
  28. powerpc.library/CauseInterrupt
  29. powerpc.library/ChangeMMU
  30. powerpc.library/ClearExcMMU
  31. powerpc.library/CmpTimePPC
  32. powerpc.library/CopyMemPPC
  33. powerpc.library/CreateMsgPortPPC
  34. powerpc.library/CreatePoolPPC
  35. powerpc.library/CreateTaskPPC
  36. powerpc.library/DeleteMsgPortPPC
  37. powerpc.library/DeletePoolPPC
  38. powerpc.library/DeleteTaskPPC
  39. powerpc.library/EndSnoopTask
  40. powerpc.library/EnqueuePPC
  41. powerpc.library/FindNamePPC
  42. powerpc.library/FindPortPPC
  43. powerpc.library/FindSemaphorePPC
  44. powerpc.library/FindTagItemPPC
  45. powerpc.library/FindTaskByID
  46. powerpc.library/FindTaskPPC
  47. powerpc.library/FreeAllMem
  48. powerpc.library/FreePooledPPC
  49. powerpc.library/FreeSemaphorePPC
  50. powerpc.library/FreeSignalPPC
  51. powerpc.library/FreeVecPPC
  52. powerpc.library/FreeXMsgPPC
  53. powerpc.library/GetHALInfo
  54. powerpc.library/GetInfo
  55. powerpc.library/GetMsgPPC
  56. powerpc.library/GetSysTimePPC
  57. powerpc.library/GetTagDataPPC
  58. powerpc.library/InitSemaphorePPC
  59. powerpc.library/InsertPPC
  60. powerpc.library/LockTaskList
  61. powerpc.library/ModifyFPExc
  62. powerpc.library/NewListPPC
  63. powerpc.library/NextTagItemPPC
  64. powerpc.library/ObtainSemaphorePPC
  65. powerpc.library/ObtainSemaphoreSharedPPC
  66. powerpc.library/ProcurePPC
  67. powerpc.library/PutMsgPPC
  68. powerpc.library/PutXMsgPPC
  69. powerpc.library/ReleaseSemaphorePPC
  70. powerpc.library/RemExcHandler
  71. powerpc.library/RemHeadPPC
  72. powerpc.library/RemovePPC
  73. powerpc.library/RemPortPPC
  74. powerpc.library/RemTailPPC
  75. powerpc.library/RemSemaphorePPC
  76. powerpc.library/ReplyMsgPPC
  77. powerpc.library/Run68K
  78. powerpc.library/SetCache
  79. powerpc.library/SetExceptPPC
  80. powerpc.library/SetExcHandler
  81. powerpc.library/SetExcMMU
  82. powerpc.library/SetHardware
  83. powerpc.library/SetNiceValue
  84. powerpc.library/SetReplyPortPPC
  85. powerpc.library/SetScheduling
  86. powerpc.library/SetSignalPPC
  87. powerpc.library/SetTaskPriPPC
  88. powerpc.library/Signal68K
  89. powerpc.library/SignalPPC
  90. powerpc.library/SnoopTask
  91. powerpc.library/SPrintF
  92. powerpc.library/SubTimePPC
  93. powerpc.library/Super
  94. powerpc.library/TrySemaphorePPC
  95. powerpc.library/UnLockTaskList
  96. powerpc.library/User
  97. powerpc.library/VacatePPC
  98. powerpc.library/WaitFor68K
  99. powerpc.library/WaitPortPPC
  100. powerpc.library/WaitPPC
  101. powerpc.library/WaitTime
  102.  
  103. powerpc.library/AllocVec32                          powerpc.library/AllocVec32
  104.  
  105.     NAME
  106.         AllocVec32 - allocates memory which is correctly aligned (V7)
  107.  
  108.     CPU
  109.         680x0
  110.  
  111.     SYNOPSIS
  112.         memblock = AllocVec32(memsize, attributes)
  113.         d0                    d0       d1
  114.  
  115.         void *AllocVec32(ULONG, ULONG);
  116.  
  117.     FUNCTION
  118.         This function allocates memory via exec/AllocVec and aligns the
  119.         memory block properly, so that this memory block can be shared
  120.         with PPC tasks. The minimal alignment of the memory block is 32.
  121.  
  122.     INPUTS
  123.         memsize - size of memory to be allocated
  124.         attributes - the desired memory attributes (see exec/AllocMem for
  125.                      a description of these attributes)
  126.  
  127.     RESULT
  128.         memblock - The address of the allocated memory block
  129.  
  130.     NOTES
  131.         Memory blocks allocated with 'AllocVec32' must be freed using
  132.         'FreeVec32'.
  133.  
  134.     SEE ALSO
  135.         FreeVec32, exec/AllocMem
  136.  
  137. powerpc.library/AllocXMsg                            powerpc.library/AllocXMsg
  138.  
  139.     NAME
  140.         AllocXMsg - allocates a message for Inter-CPU communication (V12)
  141.  
  142.     CPU
  143.         680x0
  144.  
  145.     SYNOPSIS
  146.         message = AllocXMsg(bodysize, replyport)
  147.         d0                  d0        a0
  148.  
  149.         struct Message *AllocXMsg(ULONG, struct MsgPort *);
  150.  
  151.     FUNCTION
  152.         This function allocates memory for a message which can be used
  153.         for Inter-CPU communication. Some fields of the message are
  154.         initialized.
  155.         After this function was called, the message body must be
  156.         created before sending this message.
  157.  
  158.     INPUTS
  159.         bodysize - the size of the message body (max. 65535-MN_SIZE)
  160.         replyport - the reply port
  161.  
  162.     RESULT
  163.         message - The address of an initialized message (except for
  164.                   the message body, which must be initialized by the
  165.                   programmer).
  166.  
  167.     NOTES
  168.         Calling this function is the only way allowed to create a
  169.         message which can be sent to a PPC task.
  170.  
  171.         A message allocated with 'AllocXMsg' should be freed using
  172.         'FreeXMsg' if it is not used anymore. Since V14, it is
  173.         allowed to free the messsage using 'FreeXMsgPPC' on the
  174.         PPC side (which is internally done using a cross call).
  175.  
  176.         An Inter-CPU message must be sent with 'PutXMsg' to a PPC
  177.         task.
  178.  
  179.         It is possible not to specify a replyport (simply set
  180.         replyport to NULL).
  181.  
  182.         If you want to be compatible to earlier versions, you
  183.         shouldn't free InterCPU messages by the foreign task.
  184.  
  185.     SEE ALSO
  186.         FreeXMsg, PutXMsg
  187.  
  188. powerpc.library/CausePPCInterrupt            powerpc.library/CausePPCInterrupt
  189.  
  190.     NAME
  191.         CausePPCInterrupt - invokes all interrupt handlers on PPC side (V15)
  192.  
  193.     CPU
  194.         680x0
  195.  
  196.     SYNOPSIS
  197.         CausePPCInterrupt()
  198.  
  199.         void CausePPCInterrupt();
  200.  
  201.     FUNCTION
  202.         Invokes all PPC interrupt handlers, which were added using
  203.         SetExcHandler and an exception ID = EXCF_INTERRUPT.
  204.  
  205.     NOTES
  206.         This function allows to run PPC code very quickly from the
  207.         68K side, much faster than through a regular PPC call. WarpOS
  208.         does not enforce any kind of cache consistency for such an
  209.         operation. Don't use this function, except if you know exactly
  210.         what you are doing.
  211.  
  212.     SEE ALSO
  213.         CauseInterrupt
  214.  
  215. powerpc.library/CreatePPCTask                    powerpc.library/CreatePPCTask
  216.  
  217.     NAME
  218.         CreatePPCTask - creates a new PPC task (V15)
  219.  
  220.     CPU
  221.         680x0
  222.  
  223.     SYNOPSIS
  224.         TaskPPC = CreatePPCTask(TagItems)
  225.         d0                      a0
  226.  
  227.         struct TaskPPC *CreatePPCTask(struct TagItem *);
  228.  
  229.     FUNCTION
  230.         This function creates a new PPC task under control of the tags passed.
  231.         All memory (inclusive stack) is allocated automatically.
  232.  
  233.         This function does nothing else then calling powerpc/CreateTaskPPC
  234.         through a context switch. It is a convenience function.
  235.  
  236.     INPUTS
  237.         TagItems - pointer to a tagitem array. Refer to the documentation
  238.                    of CreateTaskPPC for a description of all supported tags.
  239.  
  240.     RESULT
  241.         TaskPPC - pointer to a TaskPPC structure or NULL for failure
  242.  
  243.     NOTES
  244.         See powerpc/CreateTaskPPC
  245.  
  246.     SEE ALSO
  247.         CreateTaskPPC, powerpc/tasksPPC.i
  248.  
  249. powerpc.library/FreeVec32                            powerpc.library/FreeVec32
  250.  
  251.     NAME
  252.         FreeVec32 - frees memory allocated with 'AllocVec32' (V7)
  253.  
  254.     CPU
  255.         680x0
  256.  
  257.     SYNOPSIS
  258.         FreeVec32(memblock)
  259.                   a1
  260.  
  261.         void FreeVec32(void *);
  262.  
  263.     FUNCTION
  264.         This function frees a memory block which was allocated using
  265.         'AllocVec32'.
  266.  
  267.     INPUTS
  268.         memblock - The address of the allocated memory block
  269.  
  270.     SEE ALSO
  271.         AllocVec32
  272.  
  273. powerpc.library/FreeXMsg                              powerpc.library/FreeXMsg
  274.  
  275.     NAME
  276.         FreeXMsg - frees a message allocated with 'AllocXMsg' (V12)
  277.  
  278.     CPU
  279.         680x0
  280.  
  281.     SYNOPSIS
  282.         FreeXMsg(message)
  283.                  a0
  284.  
  285.         void FreeXMsg(struct Message *);
  286.  
  287.     FUNCTION
  288.         This function frees a memory allocated using 'AllocXMsg'.
  289.  
  290.     INPUTS
  291.         message - a message allocated by 'AllocXMsg'.
  292.  
  293.     NOTES
  294.         There were some restrictions in earlier versions using
  295.         FreeXMsg. Since V14, a XMessage created by AllocXMsg can be
  296.         freed either by another 68K task (if the message isn't used
  297.         anymore) or by a PPC task using FreeXMsgPPC.
  298.  
  299.     SEE ALSO
  300.         AllocXMsg, PutXMsg
  301.  
  302. powerpc.library/GetCPU                                  powerpc.library/GetCPU
  303.  
  304.     NAME
  305.         GetCPU - gets the PowerPC CPU type (V7)
  306.  
  307.     CPU
  308.         680x0
  309.  
  310.     SYNOPSIS
  311.         CPUType = GetCPU
  312.         d0
  313.  
  314.         ULONG GetCPU (void);
  315.  
  316.     FUNCTION
  317.         This function reads the PowerPC CPU type. A longword is returned with
  318.         one specific bit set (see the include file 'powerpc/powerpc.i' for a
  319.         description of the different CPU types)
  320.  
  321.     RESULT
  322.         CPUType - A longword with one specific bit set.
  323.  
  324. powerpc.library/GetPPCState                        powerpc.library/GetPPCState
  325.  
  326.     NAME
  327.         GetPPCState - returns the state of the PPC and PPC applications (V13)
  328.  
  329.     CPU
  330.         680x0
  331.  
  332.     SYNOPSIS
  333.         PPCState = GetPPCState
  334.         d0
  335.  
  336.         ULONG GetPPCState (void);
  337.  
  338.     FUNCTION
  339.         This function returns the current state of the PPC processor and
  340.         the state of custom applications. A bitmask is returned with the
  341.         values defined in 'powerpc.i'.
  342.  
  343.     RESULT
  344.         PPCState - A bitmask. The following bits are supported (the
  345.                    description is valid if the bit is 1):
  346.  
  347.                    PPCSTATEF_POWERSAVE  - PPC is currently in power save mode.
  348.                    PPCSTATEF_APPACTIVE  - PPC application tasks are currently
  349.                                         - active resp. installed in the system.
  350.                    PPCSTATEF_APPRUNNING - At least one PPC application task is
  351.                                           ready or running.
  352.  
  353. powerpc.library/PowerDebugMode                  powerpc.library/PowerDebugMode
  354.  
  355.     NAME
  356.         PowerDebugMode - sets the level of debugging output (V7)
  357.  
  358.     CPU
  359.         680x0
  360.  
  361.     SYNOPSIS
  362.         PowerDebugMode (debuglevel)
  363.                         d0
  364.  
  365.         void PowerDebugMode (ULONG);
  366.  
  367.     FUNCTION
  368.         The powerpc.library has a built-in debugging system which prints out
  369.         many informations to the serial port. The main purpose of this
  370.         function is to improve the maintenance of this library. If problems
  371.         occur with the powerpc.library then it will help the author of this
  372.         library a lot to fix the problems. Try to reproduce the problems with
  373.         debugging output enabled and send the debugging output to the author.
  374.         Use a program which captures the data transferred to the serial port
  375.         (for example Sushi) to save the debugging output.
  376.  
  377.     INPUTS
  378.         debuglevel - Debugging level (0-3). All other values are ignored.
  379.                      The higher the debugging level, the larger the debugging
  380.                      output. 0 means no debugging output.
  381.  
  382.     NOTES
  383.         The powerpc.library operates with debugging level 0 by default (no
  384.         debugging output). You can change the default value with the
  385.         environment variable 'powerpc/debug' (set values from 0 to 3).
  386.  
  387. powerpc.library/PutXMsg                                powerpc.library/PutXMsg
  388.  
  389.     NAME
  390.         PutXMsg - sends an Inter-CPU message to a PPC task (V12)
  391.  
  392.     CPU
  393.         680x0
  394.  
  395.     SYNOPSIS
  396.         PutXMsg(MsgPortPPC, message)
  397.                 a0          a1
  398.  
  399.         void PutXMsg(struct MsgPortPPC *, struct Message *);
  400.  
  401.     FUNCTION
  402.         This function sends an Inter-CPU message allocated by 'AllocXMsg'
  403.         to a PPC task.
  404.  
  405.     INPUTS
  406.         MsgPortPPC - a PPC message port
  407.         message - a message allocated by 'AllocXMsg'.
  408.  
  409.     NOTES
  410.         Inter-CPU must NOT be used for internal communication. They can
  411.         only be used for communication between tasks on different processors.
  412.  
  413.         Inter-CPU messages get a different node type, if they are
  414.         sent. If you want to filter out Reply-Messages from standard
  415.         or Inter-CPU messages, compare the LN_TYPE field to NT_REPLYMSG.
  416.         Replied Inter-CPU messages still get the same node type
  417.         (NT_REPLYMSG). Any assumptions about the value of the new
  418.         node type are ILLEGAL!!
  419.  
  420.         As soon as an Inter-CPU message is sent, the 68K looses ownership
  421.         over the message. No access to the message is allowed until the
  422.         reply has been arrived. If no replyport was specified, it's
  423.         allowed to free the message, after it was read from the other side.
  424.  
  425.         Inter-CPU messages can be reused if they have been replied.
  426.  
  427.         Inter-CPU messages are read and replied using the standard
  428.         message handling mechanisms (exec/WaitPort,exec/GetMsg,exec/ReplyMsg
  429.         for 68K, powerpc/WaitPortPPC, powerpc/GetMsgPPC, powerpc/ReplyMsgPPC
  430.         for PPC).
  431.  
  432.         Don't call exec/ReplyMsg with an InterCPU-Message without
  433.         Replyport (versions less than V12.2 crashed).
  434.  
  435.         The receiving task must NOT access message data, which are not
  436.         explicitely located in the message body (for example data which is
  437.         referenced by a pointer) unless both tasks care for the cache
  438.         consistency. Only the message itself is flushed/invalidated
  439.         automatically by the system.
  440.  
  441.         The receiving task may write to the message body of an Inter-CPU
  442.         message.
  443.  
  444.     SEE ALSO
  445.         AllocXMsg, FreeXMsg
  446.  
  447. powerpc.library/RunPPC                                  powerpc.library/RunPPC
  448.  
  449.     NAME
  450.         RunPPC - runs a PowerPC function (V7)
  451.  
  452.     CPU
  453.         680x0
  454.  
  455.     SYNOPSIS
  456.         status = RunPPC(PPStruct)
  457.         d0              a0
  458.  
  459.         LONG RunPPC (struct PowerPC *);
  460.  
  461.     FUNCTION
  462.         Runs a PowerPC function. A mirror PPC process is created. All
  463.         registers can be transferred to PPC as well as parameters on
  464.         stack. All cache management actions are handled automatically.
  465.  
  466.         All registers are transferred back from PPC after the PPC call
  467.         is completed. They are stored in the PowerPC structure.
  468.  
  469.         The register assignment is as follows:
  470.  
  471.         d0      <->     r3              fp0     <->     f1
  472.         d1      <->     r4              fp1     <->     f2
  473.         d2      <->     r22             fp2     <->     f3
  474.         d3      <->     r23             fp3     <->     f4
  475.         d4      <->     r24             fp4     <->     f5
  476.         d5      <->     r25             fp5     <->     f6
  477.         d6      <->     r26             fp6     <->     f7
  478.         d7      <->     r27             fp7     <->     f8
  479.         a0      <->     r5
  480.         a1      <->     r6
  481.         a2      <->     r28
  482.         a3      <->     r29
  483.         a4      <->     r2
  484.         a5      <->     r30
  485.         a6      <->     r31
  486.  
  487.         Please note, that these registers are NOT transferred directly but
  488.         in the register array mentioned above (PP_REGS).
  489.  
  490.         Here follows another table from the PPC's point of view:
  491.  
  492.         PPC-Register:                   Index into the register array:
  493.         ---------------------------------------------------------------
  494.         Base register:
  495.         r2                              12
  496.  
  497.         Scratch registers:
  498.         r3                              0
  499.         r4                              1
  500.         r5                              8
  501.         r6                              9
  502.  
  503.         Nonvolatile registers:
  504.         r22                             2
  505.         r23                             3
  506.         r24                             4
  507.         r25                             5
  508.         r26                             6
  509.         r27                             7
  510.         r28                             10
  511.         r29                             11
  512.         r30                             13
  513.         r31                             14
  514.  
  515.         New for V15: if the flag PP_LINEAR is given, then the values
  516.         at the indexes 0-7 map to the registers r3-r10. The mapping
  517.         for the FP values remains the same.
  518.  
  519. INPUTS
  520.         PPStruct - Pointer to an initialized PowerPC Structure
  521.  
  522.           PP_CODE       : Pointer to the PowerPC code
  523.           PP_OFFSET     : Not used until V12.2 of powerpc.library. From
  524.                           V12.3 on, the PP_OFFSET field is used just like
  525.                           at Run68K. If PP_OFFSET is zero, than the code
  526.                           pointed to by PP_CODE is executed, if PP_OFFSET
  527.                           is not zero, a PPC library function is executed
  528.                           with PP_CODE containing the library base and
  529.                           PP_OFFSET containing the library vector offset.
  530.           PP_FLAGS      : Flags which can be ore'd together
  531.           - PP[F/B]_ASYNC   : Call PPC function asynchronely (68K process
  532.                               returns immediately)
  533.           - PP[F/B]_LINEAR  : Map the values at indexes 0-7 to the registers
  534.                               r3-r10 (V15)
  535.           - PP[F/B]_THROW   : Cause an exception before the function is executed.
  536.                               The exception is a program exception (trap), which
  537.                               can be caught using appropriate exception handlers.
  538.                               The register r0 contains the string 'WARP', when
  539.                               the exception is triggered, which should give the
  540.                               exception handler the possibility to distinguish
  541.                               between normal exceptions and exceptions triggered
  542.                               using this mechanism (V15)
  543.           PP_STACKPTR   : Pointer to the arguments on the stack to be
  544.                           transferred. The pointer must point directly
  545.                           to the first argument, not to the return address!
  546.                           If no arguments on stack should be transferred,
  547.                           set this to zero.
  548.           PP_STACKSIZE  : Size of the stack area to be transferred. If no
  549.                           stack parameters should be transferred, set this
  550.                           to zero.
  551.           PP_REGS       : Array of longwords where the registers to be
  552.                           transferred can be stored (d0-a6). Please see
  553.                           above for the exact placement of these registers.
  554.           PP_FREGS      : Array of quadwords (8 bytes) where the FP-registers
  555.                           to be transferred can be stored (fp0-fp7). fp0 is
  556.                           at offset 0, fp1 at offset 8 etc.
  557.  
  558.     RESULT
  559.         status - PPERR_SUCCESS if the call was successfully
  560.                  PPERR_ASYNCERR if a synchrone PPC call was made after an
  561.                                 asynchrone PPC call
  562.  
  563.     NOTES
  564.         Calling a PPC function asynchronely is dangerous. Take care of
  565.         possible cache conflicts. Avoid calling system functions as much
  566.         as possible.
  567.  
  568.         If an asynchrone PPC call is done, the function WaitForPPC MUST be
  569.         called ONCE after the call was done. No other PPC call is allowed
  570.         for this 68K process after an asynchrone PPC call and before a call
  571.         to WaitForPPC.
  572.  
  573.         If an asynchronely called PPC function performs a 68K call, the call
  574.         is only performed when WaitForPPC is called by the 68K process. Note
  575.         that the PPC mirror process is still connected to the calling 68K
  576.         process.
  577.  
  578.         DON'T pass arguments on stack when calling a PPC function asynchronely.
  579.         The stack is most likely to be trashed before it is copied to the PPC
  580.         stack.
  581.  
  582.         Assembler programmers should use the macros RUNPOWERPC and
  583.         RUNPOWERPC_XL located in the include file 'powerpc/powerpc.i'
  584.  
  585.     SEE ALSO
  586.         WaitForPPC,powerpc/powerpc.i
  587.  
  588. powerpc.library/SetCache68K                        powerpc.library/SetCache68K
  589.  
  590.     NAME
  591.         SetCache68K - cache manipulation function (V15)
  592.  
  593.     CPU
  594.         680x0
  595.  
  596.     SYNOPSIS
  597.         SetCache68K(cacheflags, start, length)
  598.                     d0          a0     d1
  599.  
  600.         void SetCache68K(ULONG, void *, ULONG);
  601.  
  602.     FUNCTION
  603.         This function offers many possibilities to affect the caches of
  604.         the 68K. It performs the action defined by the cache flags. Only
  605.         one action can be performed at the same time.
  606.  
  607.     INPUTS
  608.         cacheflags - action to be performed:
  609.             CACHE_DCACHEOFF:    Data cache is disabled. The Cache is flushed
  610.                                 automatically.
  611.             CACHE_DCACHEON:     Data cache is enabled.
  612.             CACHE_DCACHEFLUSH:  Data cache is flushed.
  613.             CACHE_ICACHEOFF:    Instruction cache is disabled.
  614.             CACHE_ICACHEON:     Instruction cache is enabled.
  615.             CACHE_ICACHEINV:    Instruction cache is invalidated.
  616.             CACHE_DCACHEINV:    Data cache is invalidated
  617.  
  618.         start - pointer to the start address of the area to be affected.
  619.                 The following cacheflags support an area specification:
  620.                 CACHE_DCACHEFLUSH, CACHE_ICACHEINV, CACHE_DCACHEINV
  621.  
  622.                 if 'start' is 0 the whole address space is affected
  623.  
  624.         length - length of the area to be affected (see above for the
  625.                  cache flags which support area specification).
  626.                  if 'length' is 0 the whole address space is affected
  627.  
  628.     NOTES
  629.         Invalidating the whole instruction cache is much more efficient
  630.         than flushing only a part of it.
  631.  
  632.         Flushing the whole data cache is less efficient than flushing
  633.         a specific area, if this area is not too large.
  634.  
  635.         The caches should not be switched on/off resp. locked/unlocked
  636.         without GOOD justification. Global manipulations of the cache
  637.         should be avoided.
  638.  
  639.         Never use CACHE_DCACHEINV, except if you are completely aware of
  640.         the consequences of your doing.
  641.  
  642.     SEE ALSO
  643.         powerpc/powerpc.i
  644.  
  645. powerpc.library/SPrintF68K                          powerpc.library/SPrintF68K
  646.  
  647.     NAME
  648.         SPrintF68K - prints a formatted string to the serial port (V7)
  649.  
  650.     CPU
  651.         680x0
  652.  
  653.     SYNOPSIS
  654.         SPrintF68K (Formatstring, values )
  655.                     a0            a1
  656.  
  657.         void SPrintF68K (STRPTR, APTR);
  658.  
  659.     FUNCTION
  660.         Prints a formatted string to the serial port using the AMIGA-OS
  661.         functions 'exec/RawPutChar' and 'exec/RawDoFmt'. Can be used to add
  662.         debugging features and to improve the maintenance of software.
  663.  
  664.     INPUTS
  665.         Formatstring - A C style string with % commands to indicate where
  666.                        parameters have to be inserted (see 'exec/RawDoFmt'
  667.                        for a detailed description of these commands).
  668.         values - A pointer to an array of parameters to be inserted into
  669.                  specified places in the string.
  670.  
  671.     SEE ALSO
  672.         exec/RawDoFmt
  673.  
  674. powerpc.library/WaitForPPC                          powerpc.library/WaitForPPC
  675.  
  676.     NAME
  677.         WaitForPPC - waits for the completion of an asynchrone PPC call (V7)
  678.  
  679.     CPU
  680.         680x0
  681.  
  682.     SYNOPSIS
  683.         status = WaitForPPC(PPStruct)
  684.         d0                  a0
  685.  
  686.         LONG WaitForPPC (struct PowerPC *);
  687.  
  688.     FUNCTION
  689.         After an asynchrone PPC call was done (see RunPPC) this function must
  690.         be called to wait for the completion of the PowerPC function. All
  691.         registers transferred to the PowerPC with RunPPC are returned into the
  692.         PowerPC Structure.
  693.  
  694.     INPUTS
  695.         PPStruct - Pointer to a PowerPC Structure (see RunPPC for a description
  696.                    of the elements). The structure has not to be initialized.
  697.                    The structure must be transferred to hold the returned
  698.                    registers by the PPC function.
  699.  
  700.     RESULT
  701.         status - PPERR_SUCCESS if the call was successfully
  702.                  PPERR_WAITERR if WaitForPPC is called after a synchrone PPC
  703.                                call.
  704.  
  705.     NOTES
  706.         Assembler programmers should use the macros WAITFORPPC and
  707.         WAITFORPPC_XL located in the include file 'powerpc/powerpc.i'
  708.  
  709.     SEE ALSO
  710.         RunPPC,powerpc/powerpc.i
  711.  
  712. powerpc.library/AddHeadPPC                          powerpc.library/AddHeadPPC
  713.  
  714.     NAME
  715.         AddHeadPPC - insert a node at the head of a list (V8)
  716.  
  717.     CPU
  718.         PowerPC
  719.  
  720.     SYNOPSIS
  721.         AddHeadPPC(_PowerPCBase, list, node)
  722.                    r3            r4    r5
  723.  
  724.         void AddHeadPPC(struct Library *, struct List*, struct Node*);
  725.  
  726.     FUNCTION
  727.         Insert a node to the head of a standard exec list. This is the
  728.         mirror function of exec/AddHead.
  729.  
  730.     INPUTS
  731.         _PowerPCBase - base of powerpc.library (can be omitted)
  732.         list - a pointer to the target list
  733.         node - the node to insert
  734.  
  735.     NOTES
  736.         This function is guaranteed to work correctly, if the PowerPCBase
  737.         is not passed in r3.
  738.  
  739.         Assembler programmers may use the macro _ADDHEAD located in
  740.         'powerpc/listsPPC.i'
  741.  
  742.         This function is safe to call from exception handlers.
  743.  
  744.     SEE ALSO
  745.         InsertPPC, AddTailPPC, RemovePPC, RemHeadPPC, RemTailPPC,
  746.         EnqueuePPC, FindNamePPC, NewListPPC, powerpc/listsPPC.i
  747.  
  748. powerpc.library/AddPortPPC                          powerpc.library/AddPortPPC
  749.  
  750.     NAME
  751.         AddPortPPC - adds a public PPC message port to the system (V11)
  752.  
  753.     CPU
  754.         PowerPC
  755.  
  756.     SYNOPSIS
  757.         AddPortPPC(_PowerPCBase, MsgPortPPC)
  758.                    r3            r4
  759.  
  760.         void AddPortPPC(struct Library *, struct MsgPortPPC *);
  761.  
  762.     FUNCTION
  763.         This function adds a PPC message port to a public list of ports.
  764.         The message port should be named and the priority field should
  765.         be set. A public message port can be found by name using
  766.         'FindPortPPC'. This is the mirror function of exec/AddPort.
  767.  
  768.     INPUTS
  769.         _PowerPCBase - base of powerpc.library
  770.         MsgPortPPC - pointer to a PPC message port. It's safe to pass a
  771.                      NULL parameter.
  772.  
  773.     SEE ALSO
  774.         CreateMsgPortPPC,DeleteMsgPortPPC,FindPortPPC,RemPortPPC
  775.         powerpc/portsPPC.i
  776.  
  777. powerpc.library/AddSemaphorePPC                powerpc.library/AddSemaphorePPC
  778.  
  779.     NAME
  780.         AddSemaphorePPC - initializes a global signal semaphore (V8)
  781.  
  782.     CPU
  783.         PowerPC
  784.  
  785.     SYNOPSIS
  786.         status = AddSemaphorePPC(_PowerPCBase, SignalSemaphorePPC)
  787.         r3                        r3            r4
  788.  
  789.         LONG AddSemaphorePPC(struct Library *, struct SignalSemaphorePPC *);
  790.  
  791.     FUNCTION
  792.         Initializes a signal semaphore and adds it to the public semaphore
  793.         list. This is the mirror function of exec/AddSemaphore.
  794.  
  795.     INPUTS
  796.         _PowerPCBase - base of powerpc.library
  797.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  798.                              (a semaphore name should be specified)
  799.  
  800.     RESULT
  801.         status - status value:
  802.             SSPPC_SUCCESS: function was successful
  803.             SSPPC_NOMEM: function failed due to lack of memory
  804.  
  805.     SEE ALSO
  806.         InitSemaphorePPC, FreeSemaphorePPC, ObtainSemaphorePPC,
  807.         AttemptSemaphorePPC, ReleaseSemaphorePPC, RemSemaphorePPC,
  808.         FindSemaphorePPC, TrySemaphorePPC, powerpc/semaphoresPPC.i
  809.  
  810. powerpc.library/AddTailPPC                          powerpc.library/AddTailPPC
  811.  
  812.     NAME
  813.         AddTailPPC - insert a node at the tail of a list (V8)
  814.  
  815.     CPU
  816.         PowerPC
  817.  
  818.     SYNOPSIS
  819.         AddTailPPC(_PowerPCBase, list, node)
  820.                    r3            r4    r5
  821.  
  822.         void AddTailPPC(struct Library *, struct List*, struct Node*);
  823.  
  824.     FUNCTION
  825.         Insert a node to the tail of a standard exec list. This is the
  826.         mirror function of exec/AddTail.
  827.  
  828.     INPUTS
  829.         _PowerPCBase - base of powerpc.library (can be omitted)
  830.         list - a pointer to the target list
  831.         node - the node to insert
  832.  
  833.     NOTES
  834.         This function is guaranteed to work correctly, if the PowerPCBase
  835.         is not passed in r3.
  836.  
  837.         Assembler programmers may use the macro _ADDTAIL located in
  838.         'powerpc/listsPPC.i'
  839.  
  840.         This function is safe to call from exception handlers.
  841.  
  842.     SEE ALSO
  843.         InsertPPC, AddHeadPPC, RemovePPC, RemHeadPPC, RemTailPPC,
  844.         EnqueuePPC, FindNamePPC, NewListPPC, powerpc/listsPPC.i
  845.  
  846. powerpc.library/AddTimePPC                          powerpc.library/AddTimePPC
  847.  
  848.     NAME
  849.         AddTimePPC - adds one time request to another (V7)
  850.  
  851.     CPU
  852.         PowerPC
  853.  
  854.     SYNOPSIS
  855.         AddTimePPC(_PowerPCBase, Dest, Source)
  856.                    r3            r4    r5
  857.  
  858.         void AddTimePPC(struct Library *, struct timeval *, struct timeval *);
  859.  
  860.     FUNCTION
  861.         This routine adds one timeval structure to another. The results are
  862.         stored in the destination (Dest + Source -> Dest)
  863.  
  864.         This is the mirror function of timer/AddTime.
  865.  
  866.     INPUTS
  867.         _PowerPCBase - base of powerpc.library
  868.         Dest - pointer to a timeval structure
  869.         Source - pointer to a timeval structure
  870.  
  871.     NOTES
  872.         This function is safe to call from exception handlers
  873.  
  874.     SEE ALSO
  875.         GetSysTimePPC, SubTimePPC, CmpTimePPC
  876.  
  877. powerpc.library/AllocPooledPPC                  powerpc.library/AllocPooledPPC
  878.  
  879.     NAME
  880.         AllocPooledPPC - allocate memory with the pool manager (V15)
  881.  
  882.     CPU
  883.         PowerPC
  884.  
  885.     SYNOPSIS
  886.         memory = AllocPooledPPC(_PowerPCBase, poolheader, size)
  887.         r3                      r3            r4          r5
  888.  
  889.         void *AllocPooledPPC(struct Library*, void *,ULONG);
  890.  
  891.     FUNCTION
  892.         Allocate memSize bytes of memory, and return a pointer. NULL is
  893.         returned if the allocation fails. This is the mirror function
  894.         of exec/AllocPooled. Refer to the documentation of exec/AllocPooled
  895.         for more infos.
  896.  
  897.     INPUTS
  898.         _PowerPCBase - base of powerpc.library
  899.         poolHeader - a specific private pool header.
  900.         size - size of memory to be allocated
  901.  
  902.     RESULT
  903.         memory - pointer to the allocated memory block or NULL for failure
  904.  
  905.     SEE ALSO
  906.         AllocVecPPC, CreatePoolPPC, DeletePoolPPC, AllocPooledPPC
  907.  
  908. powerpc.library/AllocSignalPPC                  powerpc.library/AllocSignalPPC
  909.  
  910.     NAME
  911.         AllocSignalPPC - allocate a signal (V8)
  912.  
  913.     CPU
  914.         PowerPC
  915.  
  916.     SYNOPSIS
  917.         signalnum = AllocSignalPPC(_PowerPCBase, signalNum)
  918.         r3                         r3            r4
  919.  
  920.         LONG AllocSignalPPC(struct Library *, LONG);
  921.  
  922.     FUNCTION
  923.         Allocate a signal bit from the current task's pool. Either a
  924.         particular bit or the next free bit may be allocated. This
  925.         is the mirror function of exec/AllocSignal.
  926.  
  927.     INPUTS
  928.         _PowerPCBase - base of powerpc.library
  929.         signalNum - the desired signal bit number (0..31) or -1
  930.                     if the next free bit should be allocated
  931.  
  932.     RESULT
  933.         signalnum - the signal bit allocated or -1 for failure.
  934.  
  935.     NOTES
  936.         IMPORTANT: The signal bit numbers are returned in the
  937.         68K notation! For example, if the number 27 is returned,
  938.         the waiting mask must be $08000000.
  939.  
  940.         All signal allocations are kept coherent on both CPU's.
  941.         A signal allocated on the 68K side is not free anymore
  942.         for the mirror PPC task and vice versa. The PPC also
  943.         can wait for signals or send signals allocated on the
  944.         68K side and vice versa (V11).
  945.  
  946.     SEE ALSO
  947.         FreeSignalPPC, SetSignalPPC, SignalPPC, WaitPPC
  948.  
  949. powerpc.library/AllocVecPPC                        powerpc.library/AllocVecPPC
  950.  
  951.     NAME
  952.         AllocVecPPC - allocates memory for PPC with MMU support (V7)
  953.  
  954.     CPU
  955.         PowerPC
  956.  
  957.     SYNOPSIS
  958.         memblock = AllocVecPPC(_PowerPCBase, memsize, attributes, alignment)
  959.         r3                     r3            r4       r5          r6
  960.  
  961.         void *AllocVecPPC(struct Library *, ULONG, ULONG, ULONG);
  962.  
  963.     FUNCTION
  964.         This function allocates memory which is correctly aligned for the use
  965.         by PowerPC applications. It's the mirror function of exec/AllocVec
  966.         but offers some additional features.
  967.         AllocVecPPC supports user defined alignment and allocation of memory-
  968.         blocks with a desired cache mode (MMU support only for V9+)
  969.         Since V12, it's possible to allocate memory, which is protected
  970.         against other tasks (either full- or write-protected).
  971.  
  972.     INPUTS
  973.         _PowerPCBase - base of powerpc.library
  974.         memsize - the amount of memory to be allocated.
  975.         attributes - the requirements as explained in exec/AllocMem
  976.                      This function offers some additional attributes:
  977.  
  978.             MEMF_WRITETHROUGH: maps the allocated memory as writethrough
  979.             MEMF_COPYBACK:     maps the allocated memory as copyback
  980.             MEMF_CACHEON:      maps the allocated memory as cachable
  981.             MEMF_CACHEOFF:     maps the allocated memory as noncachable
  982.             MEMF_GUARDED:      maps the allocated memory as guarded
  983.             MEMF_NOTGUARDED:   maps the allocated memory as not guarded
  984.             MEMF_BAT:          puts the allocated memory block into a
  985.                                BAT register
  986.             MEMF_PROTECT:      the memory block should be full-protected
  987.                                against other tasks (no user-accesses of
  988.                                other tasks allowed).
  989.             MEMF_WRITEPROTECT: the memory block should be write-protected
  990.                                against other tasks (no user-write-acesses
  991.                                of other tasks allowed).
  992.  
  993.         alignment - the desired alignment of the memory block. The system
  994.                     may round this value up to a minimal alignment. It's
  995.                     safe to pass 0 as alignment.
  996.  
  997.     RESULT
  998.         memblock - The address of the allocated memory. If the
  999.                    memory couldn't be allocated 0 is returned.
  1000.  
  1001.     NOTES
  1002.         The amount of memory effectively allocated is usually bigger
  1003.         than the given memsize. It's not a good idea to call this
  1004.         function many times to allocate very small pieces of memory.
  1005.  
  1006.         If some of the additional memflags are specified, the alignment
  1007.         and the size is internally rounded up to meet the requirements
  1008.         of the MMU.
  1009.  
  1010.         The additional MMU memflags are intended for highly optimizing
  1011.         code and shoud not be used by standard applications.
  1012.  
  1013.         The memflag MEMF_BAT can improve the performance of the memory
  1014.         accesses heavily (especially on CPU's with software tablesearch).
  1015.         But DON'T use this flag unless you really need the speed. Note:
  1016.         The required free memory has to be much bigger than the size of
  1017.         the memory to be allocated, because there are severe alignment
  1018.         restrictions when using BAT registers.
  1019.  
  1020.         The memflag MEMF_BAT has no effect if the task runs with BAT MMU
  1021.         Setup.
  1022.  
  1023.         Note that no other tasks should access memory which was allocated
  1024.         using special MMU memflags, because the other task can probably
  1025.         run under a different MMU setup which can cause cache problems,
  1026.         if the other one writes to the same memory in copyback mode
  1027.         while this task accesses the data in noncachable mode, for
  1028.         example.
  1029.  
  1030.         The MMU support ist not implemented in powerpc.library <= V9.
  1031.         The memory protection support ist not implemented in
  1032.         powerpc.library <= V11.
  1033.  
  1034.     BUGS
  1035.         Before V14, allocations > 512KB could fail.
  1036.  
  1037.     SEE ALSO
  1038.         FreeVecPPC, FreeAllMem, powerpc/memoryPPC.i
  1039.  
  1040. powerpc.library/AllocXMsgPPC                      powerpc.library/AllocXMsgPPC
  1041.  
  1042.     NAME
  1043.         AllocXMsgPPC - allocates a message for Inter-CPU communication (V12)
  1044.  
  1045.     CPU
  1046.         PowerPC
  1047.  
  1048.     SYNOPSIS
  1049.         message = AllocXMsgPPC(_PowerPCBase, bodysize, replyport)
  1050.         r3                     r3            r4        r5
  1051.  
  1052.         struct Message *AllocXMsgPPC(struct Library *, ULONG, struct MsgPort *);
  1053.  
  1054.     FUNCTION
  1055.         This function allocates memory for a message which can be used
  1056.         for Inter-CPU communication. Some fields of the message are
  1057.         initialized.
  1058.         After this function was called, the message body must be
  1059.         created before sending this message.
  1060.  
  1061.     INPUTS
  1062.         _PowerPCBase - base of powerpc.library
  1063.         bodysize - the size of the message body (max. 65535-MN_SIZE)
  1064.         replyport - the reply port
  1065.  
  1066.     RESULT
  1067.         message - The address of an initialized message (except for
  1068.                   the message body, which must be initialized by the
  1069.                   programmer).
  1070.  
  1071.     NOTES
  1072.         Calling this function is the only way allowed to create a
  1073.         message which can be sent to a 68K task.
  1074.  
  1075.         A message allocated with 'AllocXMsgPPC' should be freed using
  1076.         'FreeXMsgPPC' if it is not used anymore. Since V14, it is
  1077.         allowed to free the messsage using 'FreeXMsg' on the
  1078.         68K side (which is internally done using a cross call).
  1079.  
  1080.         An Inter-CPU message must be sent with 'PutXMsgPPC' to a 68K
  1081.         task.
  1082.  
  1083.         It is possible not to specify a replyport (simply set
  1084.         replyport to NULL).
  1085.  
  1086.         If you want to be compatible to earlier versions, you
  1087.         shouldn't free InterCPU messages by the foreign task.
  1088.  
  1089.     SEE ALSO
  1090.         FreeXMsgPPC, PutXMsgPPC
  1091.  
  1092. powerpc.library/AttemptSemaphorePPC        powerpc.library/AttemptSemaphorePPC
  1093.  
  1094.     NAME
  1095.         AttemptSemaphorePPC - try to obtain without blocking (V8)
  1096.  
  1097.     CPU
  1098.         PowerPC
  1099.  
  1100.     SYNOPSIS
  1101.         status = AttemptSemaphorePPC(_PowerPCBase, SignalSemaphorePPC)
  1102.                                      r3            r4
  1103.  
  1104.         LONG AttemptSemaphorePPC(struct Library *,
  1105.                                   struct SignalSemaphorePPC *);
  1106.  
  1107.     FUNCTION
  1108.         Tries to get exclusive access to a signal semaphore. If the semaphore
  1109.         is locked by another task, this function returns with an appropriate
  1110.         status value. This is the mirror function of exec/AttemptSemaphore
  1111.  
  1112.     INPUTS
  1113.         _PowerPCBase - base of powerpc.library
  1114.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  1115.  
  1116.     RESULT
  1117.         status - status value:
  1118.             ATTEMPT_SUCCESS: operation successful
  1119.             ATTEMPT_FAILURE: semaphore couldn't be locked
  1120.  
  1121.     NOTES
  1122.         This call is guaranteed to preserve all GPR (except r0 and r3)
  1123.         and the CTR.
  1124.  
  1125.     SEE ALSO
  1126.         InitSemaphorePPC, FreeSemaphorePPC, ObtainSemaphorePPC,
  1127.         ReleaseSemaphorePPC, AddSemaphorePPC, RemSemaphorePPC
  1128.         FindSemaphorePPC, TrySemaphorePPC, powerpc/semaphoresPPC.i
  1129.  
  1130. powerpc.library/AttemptSemaphoreSharedPPC  powerpc.library/AttemptSemaphoreSharedPPC
  1131.  
  1132.     NAME
  1133.         AttemptSemaphoreSharedPPC - try to obtain without blocking (V15)
  1134.  
  1135.     CPU
  1136.         PowerPC
  1137.  
  1138.     SYNOPSIS
  1139.         status = AttemptSemaphoreSharedPPC(_PowerPCBase, SignalSemaphorePPC)
  1140.                                            r3            r4
  1141.  
  1142.         LONG AttemptSemaphoreSharedPPC(struct Library *,
  1143.                                        struct SignalSemaphorePPC *);
  1144.  
  1145.     FUNCTION
  1146.         This call is similar to powerpc/ObtainSemaphoreSharedPPC except that
  1147.         it will not block if the semaphore could not be locked.
  1148.  
  1149.         This is the mirror function of exec/AttemptSemaphoreShared
  1150.  
  1151.     INPUTS
  1152.         _PowerPCBase - base of powerpc.library
  1153.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  1154.  
  1155.     RESULT
  1156.         status - status value:
  1157.             ATTEMPT_SUCCESS: operation successful
  1158.             ATTEMPT_FAILURE: semaphore couldn't be locked
  1159.  
  1160.     NOTES
  1161.         This call is guaranteed to preserve all GPR (except r0 and r3)
  1162.         and the CTR.
  1163.  
  1164.     SEE ALSO
  1165.         AttemptSemaphorePPC, ObtainSemaphoreSharedPPC, powerpc/semaphoresPPC.i
  1166.  
  1167. powerpc.library/CauseInterrupt                  powerpc.library/CauseInterrupt
  1168.  
  1169.     NAME
  1170.         CauseInterrupt - invokes all interrupt handlers (V15)
  1171.  
  1172.     CPU
  1173.         PowerPC
  1174.  
  1175.     SYNOPSIS
  1176.         CauseInterrupt()
  1177.  
  1178.         void CauseInterrupt();
  1179.  
  1180.     FUNCTION
  1181.         Invokes all PPC interrupt handlers, which were added using
  1182.         SetExcHandler and an exception ID = EXCF_INTERRUPT.
  1183.  
  1184.     NOTES
  1185.         This function can be compared to the softinterrupt mechanism
  1186.         of exec. But the interrupt handlers are not removed after
  1187.         they were invoked. They have to removed using RemExcHandler.
  1188.  
  1189.         All interrupt handlers are guaranteed to be executed
  1190.         before this function is left.
  1191.  
  1192.     SEE ALSO
  1193.         CausePPCInterrupt
  1194.  
  1195. powerpc.library/ChangeMMU                            powerpc.library/ChangeMMU
  1196.  
  1197.     NAME
  1198.         ChangeMMU - changes the MMU setup of the current task (V10)
  1199.  
  1200.     CPU
  1201.         PowerPC
  1202.  
  1203.     SYNOPSIS
  1204.         ChangeMMU(_PowerPCBase, MMUMode)
  1205.                   r3            r4
  1206.  
  1207.         void ChangeMMU(struct Library *, ULONG);
  1208.  
  1209.     FUNCTION
  1210.         Changes the MMU setup of the currently running task. A task is able
  1211.         to run with two different MMU setups:
  1212.  
  1213.         - paged MMU setup: The standard method, where almost every memory
  1214.           access is controlled by the page table
  1215.         - BAT MMU setup: Almost all the memory is controlled by the 4 BAT
  1216.           registers.
  1217.  
  1218.     INPUTS
  1219.         _PowerPCBase - base of powerpc.library
  1220.         MMUMode - CHMMU_STANDARD: change MMU setup to standard
  1221.                   CHMMU_BAT     : change MMU setup to BAT setup
  1222.  
  1223.     NOTES
  1224.         This function should usually NOT be called. It is intended for
  1225.         highly optimizing code and should only be used, if enough MMU
  1226.         knowledge is present.
  1227.  
  1228.         The state of the current task can be changed from the shell by
  1229.         using the tool 'changemmu' (and this is the better way how to
  1230.         change the setup rather than calling the library function)
  1231.  
  1232.     SEE ALSO
  1233.         powerpc/tasksppc.i
  1234.  
  1235. powerpc.library/ClearExcMMU                        powerpc.library/ClearExcMMU
  1236.  
  1237.     NAME
  1238.         ClearExcMMU - removes the temp. MMU setup installed by SetExcMMU (V10)
  1239.  
  1240.     CPU
  1241.         PowerPC
  1242.  
  1243.     SYNOPSIS
  1244.         ClearExcMMU(_PowerPCBase)
  1245.                     r3
  1246.  
  1247.         void ClearExcMMU(struct Library *);
  1248.  
  1249.     FUNCTION
  1250.         This function is for exception handlers only. It removes the temporary
  1251.         BAT based MMU setup, which was installed using SetExcMMU. The old MMU
  1252.         state is restored.
  1253.  
  1254.     INPUTS
  1255.         _PowerPCBase - base of powerpc.library
  1256.  
  1257.     NOTES
  1258.         This function must not be called from anywhere else than from
  1259.         an exception handler.
  1260.  
  1261.     SEE ALSO
  1262.         SetExcMMU
  1263.  
  1264. powerpc.library/CmpTimePPC                          powerpc.library/CmpTimePPC
  1265.  
  1266.     NAME
  1267.         CmpTimePPC - compares two timeval structures (V7)
  1268.  
  1269.     CPU
  1270.         PowerPC
  1271.  
  1272.     SYNOPSIS
  1273.         result = CmpTimePPC(_PowerPCBase, Dest, Source)
  1274.         r3                  r3            r4    r5
  1275.  
  1276.         LONG CmpTimePPC(struct Library *, struct timeval *, struct timeval *);
  1277.  
  1278.     FUNCTION
  1279.         This routine compares two timeval structures.
  1280.  
  1281.         This is the mirror function of timer/CmpTime.
  1282.  
  1283.     INPUTS
  1284.         _PowerPCBase - base of powerpc.library
  1285.         Dest - pointer to a timeval structure
  1286.         Source - pointer to a timeval structure
  1287.  
  1288.     RESULT
  1289.         0  - if both timeval structures are equal
  1290.         -1 - if Dest is greater than Source
  1291.         1  - if Dest is less than Source
  1292.  
  1293.  
  1294.     NOTES
  1295.         This function is safe to call from exception handlers
  1296.  
  1297.     SEE ALSO
  1298.         GetSysTimePPC, AddTimePPC, SubTimePPC
  1299.  
  1300. powerpc.library/CopyMemPPC                          powerpc.library/CopyMemPPC
  1301.  
  1302.     NAME
  1303.         CopyMemPPC - copies memory the fastest way possible (V12)
  1304.  
  1305.     CPU
  1306.         PowerPC
  1307.  
  1308.     SYNOPSIS
  1309.         CopyMemPPC(_PowerPCBase, source, dest, size)
  1310.                    r3            r4      r5    r6
  1311.  
  1312.         void CopyMemPPC(struct Library *, void *, void *, ULONG);
  1313.  
  1314.     FUNCTION
  1315.         This function copies a source memory area to a destination memory
  1316.         area. No overlapping is supported. CopyMemPPC tries to copy with
  1317.         the highest bandwidth possible.
  1318.  
  1319.     INPUTS
  1320.         _PowerPCBase - base of powerpc.library
  1321.         source - address of the source memory area
  1322.         dest - address of the destination memory area
  1323.         size - size of the memory area to be copied
  1324.  
  1325.     NOTES
  1326.         The highest performance can be achieved if both memory areas have
  1327.         a minimal alignment of 8.
  1328.  
  1329. powerpc.library/CreateMsgPortPPC              powerpc.library/CreateMsgPortPPC
  1330.  
  1331.     NAME
  1332.         CreateMsgPortPPC - creates a new PPC message port (V11)
  1333.  
  1334.     CPU
  1335.         PowerPC
  1336.  
  1337.     SYNOPSIS
  1338.         MsgPortPPC = CreateMsgPortPPC(_PowerPCBase)
  1339.         r3                            r3
  1340.  
  1341.         struct MsgPortPPC *CreateMsgPortPPC(struct Library *);
  1342.  
  1343.     FUNCTION
  1344.         This function creates a new PowerPC message port. This is the only
  1345.         way allowed to create a PPC message port. It is the mirror function
  1346.         of exec/CreateMsgPort.
  1347.  
  1348.     INPUTS
  1349.         _PowerPCBase - base of powerpc.library
  1350.  
  1351.     RESULT
  1352.         MsgPortPPC - pointer to a MsgPortPPC structure or NULL for failure
  1353.  
  1354.     NOTES
  1355.         A PowerPC message port should be deleted using 'DeleteMsgPortPPC'
  1356.         if it is not used anymore.
  1357.  
  1358.         It's forbidden to access PPC message ports by the standard
  1359.         exec message handling routines.
  1360.  
  1361.     SEE ALSO
  1362.         DeleteMsgPortPPC,FindPortPPC,AddPortPPC,RemPortPPC
  1363.         powerpc/portsPPC.i
  1364.  
  1365. powerpc.library/CreatePoolPPC                    powerpc.library/CreatePoolPPC
  1366.  
  1367.     NAME
  1368.         CreatePoolPPC - creates a memory allocation pool (V15)
  1369.  
  1370.     CPU
  1371.         PowerPC
  1372.  
  1373.     SYNOPSIS
  1374.         Poolheader = CreatePoolPPC(_PowerPCBase, attr, puddlesize, treshsize)
  1375.         r3                         r3            r4    r5          r6
  1376.  
  1377.         void *CreatePoolPPC(struct Library *, ULONG, ULONG, ULONG);
  1378.  
  1379.     FUNCTION
  1380.         Allocate and prepare a new memory pool header. This is the mirror
  1381.         function of exec/CreatePool. Refer to the documentation of
  1382.         exec/CreatePool for more infos.
  1383.  
  1384.     INPUTS
  1385.         _PowerPCBase - base of powerpc.library
  1386.         attr - the requirements as explained in powerpc/AllocVecPPC
  1387.         puddleSize - the size of Puddles
  1388.         threshSize - the largest allocation that goes into normal puddles
  1389.                      This *MUST* be less than or equal to puddleSize.
  1390.  
  1391.     RESULT
  1392.         poolheader - The address of a new pool header, or NULL for error.
  1393.  
  1394.     NOTES
  1395.         The memory attribute MEMF_BAT is not supported for CreatePoolPPC.
  1396.  
  1397.         The puddlesize value is rounded up by the system to meet MMU
  1398.         alignment restrictions. Currently every pool's size is a multiple
  1399.         of 4KB.
  1400.  
  1401.     SEE ALSO
  1402.         AllocVecPPC, DeletePoolPPC, AllocPooledPPC, FreePooledPPC
  1403.         powerpc/memoryPPC.i
  1404.  
  1405. powerpc.library/CreateTaskPPC                    powerpc.library/CreateTaskPPC
  1406.  
  1407.     NAME
  1408.         CreateTaskPPC - creates a new PPC task (V8)
  1409.  
  1410.     CPU
  1411.         PowerPC
  1412.  
  1413.     SYNOPSIS
  1414.         TaskPPC = CreateTaskPPC(_PowerPCBase, TagItems)
  1415.         r3                      r3            r4
  1416.  
  1417.         struct TaskPPC *CreateTaskPPC(struct Library *, struct TagItem *);
  1418.  
  1419.     FUNCTION
  1420.         This function creates a new PPC task under control of the tags passed.
  1421.         All memory (inclusive stack) is allocated automatically.
  1422.  
  1423.         PPC tasks are similar to exec tasks (the first element of the TaskPPC
  1424.         structure is an exec task structure). The scheduling of these tasks
  1425.         works similar to exec, so a running task blocks all tasks with lower
  1426.         priority.
  1427.  
  1428.     INPUTS
  1429.         _PowerPCBase - base of powerpc.library
  1430.         TagItems - pointer to a tagitem array. The following tags are
  1431.                    supported:
  1432.  
  1433.             TASKATTR_CODE:      pointer to the entry point of the new task
  1434.                                 (MUST be specified)
  1435.             TASKATTR_EXITCODE:  pointer to the exit routine of the new task
  1436.             TASKATTR_NAME:      task name (MUST be specified)
  1437.             TASKATTR_PRI:       task priority (-128 ... 127). Default = 0.
  1438.             TASKATTR_STACKSIZE: the desired stack size. If this tag is omitted
  1439.                                 the default stack size will be 16K.
  1440.             TASKATTR_R2:        smalldata base of the PPC program
  1441.             TASKATTR_R3:
  1442.             ...
  1443.             TASKATTR_R10:       parameters to be passed to the new task
  1444.                                 in the specified registers
  1445.             TASKATTR_MOTHERPRI: the priority is taken from the currently
  1446.                                 running task (TASKATTR_PRI is ignored) (V9)
  1447.             TASKATTR_BAT:       lets the task run under BAT MMU setup by
  1448.                                 default (V10)
  1449.             TASKATTR_INHERITR2: the child task's r2 register is set to
  1450.                                 the mother task's r2. TASKATTR_R2 is overridden.
  1451.                                 This way the child tasks can access the mother
  1452.                                 task's variables (V15)
  1453.             TASKATTR_ATOMIC:    the newly created task becomes non-interruptable
  1454.                                 from other task's point of view. The task can
  1455.                                 still be interrupted by exceptions/interrupts,
  1456.                                 but it can't be interrupted by other tasks (V15)
  1457.  
  1458.     RESULT
  1459.         TaskPPC - pointer to a TaskPPC structure or NULL for failure
  1460.  
  1461.     NOTES
  1462.         If a 68K application only wants to call a PPC function, it's
  1463.         better to use Run68K instead of creating a new PPC task.
  1464.  
  1465.         While a PPC task created by Run68K is always connected to
  1466.         the calling 68K process, a task created by CreateTaskPPC is
  1467.         completely independent. If such a task peforms 68K calls, a
  1468.         new mirror process on the 68K side is created.
  1469.  
  1470.         If an alternative exit code is specified (TASKATTR_EXITCODE)
  1471.         the value passed in TASKATTR_R2 remains intact in this exit
  1472.         code.
  1473.  
  1474.         Use TASKATTR_INHERITR2 whenever possible, it makes programming
  1475.         multi-task applications easier. But if you do so, your application
  1476.         will require powerpc.library V15+.
  1477.  
  1478.         Don't use TASKATTR_ATOMIC, except if you have a serious reason
  1479.         to use it. This tag might have a severe impact on the WarpOS
  1480.         multitasking.
  1481.  
  1482.     SEE ALSO
  1483.         DeleteTaskPPC,FindTaskPPC,powerpc/tasksPPC.i
  1484.  
  1485. powerpc.library/DeleteMsgPortPPC              powerpc.library/DeleteMsgPortPPC
  1486.  
  1487.     NAME
  1488.         DeleteMsgPortPPC - deletes a PPC message port (V11)
  1489.  
  1490.     CPU
  1491.         PowerPC
  1492.  
  1493.     SYNOPSIS
  1494.         DeleteMsgPortPPC(_PowerPCBase, MsgPortPPC)
  1495.                          r3            r4
  1496.  
  1497.         void DeleteMsgPortPPC(struct Library *, struct MsgPortPPC *);
  1498.  
  1499.     FUNCTION
  1500.         This function deletes a PowerPC message port created using
  1501.         'CreateMsgPortPPC'. It is the mirror function of exec/DeleteMsgPort.
  1502.  
  1503.     INPUTS
  1504.         _PowerPCBase - base of powerpc.library
  1505.         MsgPortPPC - Pointer to the message port to delete. It's safe to
  1506.                      pass NULL as parameter
  1507.  
  1508.     NOTES
  1509.         Calling 'DeleteMsgPortPPC' is the ONLY way allowed to delete a PPC
  1510.         message port.
  1511.  
  1512.     SEE ALSO
  1513.         CreateMsgPortPPC,FindPortPPC,AddPortPPC,RemPortPPC
  1514.         powerpc/portsPPC.i
  1515.  
  1516. powerpc.library/DeletePoolPPC                    powerpc.library/DeletePoolPPC
  1517.  
  1518.     NAME
  1519.         DeletePoolPPC - deletes a memory allocation pool (V15)
  1520.  
  1521.     CPU
  1522.         PowerPC
  1523.  
  1524.     SYNOPSIS
  1525.         DeletePoolPPC(_PowerPCBase, poolheader)
  1526.                       r3            r4
  1527.  
  1528.         void DeletePoolPPC(struct Library *, void *);
  1529.  
  1530.     FUNCTION
  1531.         Frees all memory in all pudles of the specified pool header, then
  1532.         deletes the pool header. Individual free calls are not needed.
  1533.  
  1534.         This is the mirror function of exec/DeletePool. Refer to the
  1535.         documentation of exec/DeletePool for more infos.
  1536.  
  1537.     INPUTS
  1538.         _PowerPCBase - base of powerpc.library
  1539.         poolheader - value returned by CreatePoolPPC
  1540.  
  1541.     SEE ALSO
  1542.         FreeVecPPC, CreatePoolPPC, AllocPooledPPC, FreePooledPPC
  1543.         powerpc/memoryPPC.i
  1544.  
  1545. powerpc.library/DeleteTaskPPC                    powerpc.library/DeleteTaskPPC
  1546.  
  1547.     NAME
  1548.         DeleteTaskPPC - deletes a PPC task (V8)
  1549.  
  1550.     CPU
  1551.         PowerPC
  1552.  
  1553.     SYNOPSIS
  1554.         DeleteTaskPPC(_PowerPCBase, PPCTask)
  1555.                       r3            r4
  1556.  
  1557.         void DeleteTaskPPC(struct Library *, struct TaskPPC *);
  1558.  
  1559.     FUNCTION
  1560.         Deletes a PPC task created by CreateTaskPPC.
  1561.  
  1562.     INPUTS
  1563.         _PowerPCBase - base of powerpc.library
  1564.         TaskPPC - PPC task to remove or NULL for self removal
  1565.  
  1566.     NOTES
  1567.         It's not encouraged to delete other tasks. This function
  1568.         should only be called with a NULL parameter to remove the
  1569.         calling task itself.
  1570.  
  1571.         The system may also remove an existing 68K mirror process
  1572.         connected to the calling PPC task.
  1573.  
  1574.     SEE ALSO
  1575.         CreateTaskPPC,FindTaskPPC,powerpc/tasksPPC.i
  1576.  
  1577. powerpc.library/EndSnoopTask                      powerpc.library/EndSnoopTask
  1578.  
  1579.     NAME
  1580.         EndSnoopTask - stops monitoring a PPC task (V13)
  1581.  
  1582.     CPU
  1583.         PowerPC
  1584.  
  1585.     SYNOPSIS
  1586.         EndSnoopTask (_PowerPCBase, SnoopID)
  1587.                       r3            r4
  1588.  
  1589.         void EndSnoopTask (struct Library *, ULONG);
  1590.  
  1591.     FUNCTION
  1592.         This function removes a callback job, which was installed using
  1593.         powerpc/SnoopTask.
  1594.  
  1595.     INPUTS
  1596.         _PowerPCBase - base of powerpc.library
  1597.         SnoopID - The value returned by SnoopTask. It's safe to pass
  1598.                   NULL as parameter (is handled as no-op)
  1599.  
  1600.     SEE ALSO
  1601.         SnoopTask
  1602.  
  1603. powerpc.library/EnqueuePPC                          powerpc.library/EnqueuePPC
  1604.  
  1605.     NAME
  1606.         EnqueuePPC - inserts a node into a list sorted by priority (V8)
  1607.  
  1608.     CPU
  1609.         PowerPC
  1610.  
  1611.     SYNOPSIS
  1612.         EnqueuePPC(_PowerPCBase, list, node)
  1613.                    r3            r4    r5
  1614.  
  1615.         void EnqueuePPC(struct Library *, struct List*, struct Node*);
  1616.  
  1617.     FUNCTION
  1618.         Inserts a node to a standard exec list based on the node priority.
  1619.         In this way a list can be kept sorted by priority all the time.
  1620.         New nodes will be inserted in front of the first node with a
  1621.         lower priority. This is the mirror function of exec/Enqueue.
  1622.  
  1623.     INPUTS
  1624.         _PowerPCBase - base of powerpc.library (can be omitted)
  1625.         list - a pointer to the target list
  1626.         node - the node to enqueue
  1627.  
  1628.     NOTES
  1629.         This function is guaranteed to work correctly, if the PowerPCBase
  1630.         is not passed in r3.
  1631.  
  1632.         This function is safe to call from exception handlers.
  1633.  
  1634.     SEE ALSO
  1635.         InsertPPC, AddTailPPC, AddHeadPPC, RemovePPC, RemHeadPPC,
  1636.         RemTailPPC, FindNamePPC, NewListPPC, powerpc/listsPPC.i
  1637.  
  1638. powerpc.library/FindNamePPC                        powerpc.library/FindNamePPC
  1639.  
  1640.     NAME
  1641.         FindNamePPC - finds a node with given name (V8)
  1642.  
  1643.     CPU
  1644.         PowerPC
  1645.  
  1646.     SYNOPSIS
  1647.         node = FindNamePPC(_PowerPCBase, start, name)
  1648.         r3                 r3            r4     r5
  1649.  
  1650.         struct Node *FindNamePPC(struct Library *, struct List*, STRPTR);
  1651.  
  1652.     FUNCTION
  1653.         Searches a list for a node with the given name. If multiple nodes
  1654.         with same names should be found, this function can be called with
  1655.         a node starting point.
  1656.  
  1657.     INPUTS
  1658.         _PowerPCBase - base of powerpc.library
  1659.         list - a list header or a node to start the searche (if node,
  1660.                this one is skipped)
  1661.         name - the name of the node
  1662.  
  1663.     NOTES
  1664.         This function is guaranteed to work correctly, if the PowerPCBase
  1665.         is not passed in r3.
  1666.  
  1667.         This function is safe to call from exception handlers.
  1668.  
  1669.     SEE ALSO
  1670.         InsertPPC, AddTailPPC, AddHeadPPC, RemovePPC, RemHeadPPC,
  1671.         RemTailPPC, EnqueuePPC, NewListPPC, powerpc/listsPPC.i
  1672.  
  1673. powerpc.library/FindPortPPC                        powerpc.library/FindPortPPC
  1674.  
  1675.     NAME
  1676.         FindPortPPC - finds a public PPC message port by name (V11)
  1677.  
  1678.     CPU
  1679.         PowerPC
  1680.  
  1681.     SYNOPSIS
  1682.         MsgPortPPC = FindPortPPC(_PowerPCBase, name)
  1683.         r3                       r3            r4
  1684.  
  1685.         struct MsgPortPPC* FindPortPPC(struct Library *, STRPTR);
  1686.  
  1687.     FUNCTION
  1688.         This function will search the global list of PPC message ports
  1689.         for a port with the given name. No arbritation is needed. This
  1690.         is the mirror function of exec/FindPort.
  1691.  
  1692.     INPUTS
  1693.         _PowerPCBase - base of powerpc.library
  1694.         name - name of the PPC message port to search
  1695.  
  1696.     RESULT
  1697.         MsgPortPPC - pointer to a PPC message port or NULL if it was not
  1698.                      found.
  1699.  
  1700.     SEE ALSO
  1701.         CreateMsgPortPPC,DeleteMsgPortPPC,AddPortPPC,RemPortPPC
  1702.         powerpc/portsPPC.i
  1703.  
  1704. powerpc.library/FindSemaphorePPC              powerpc.library/FindSemaphorePPC
  1705.  
  1706.     NAME
  1707.         FindSemaphorePPC - finds a public semaphore (V8)
  1708.  
  1709.     CPU
  1710.         PowerPC
  1711.  
  1712.     SYNOPSIS
  1713.         SignalsemaphorePPC = FindSemaphorePPC(_PowerPCBase, SemaphoreName)
  1714.         r3                                    r3            r4
  1715.  
  1716.         struct signalsemaphorePPC *FindSemaphorePPC(struct Library *, STRPTR);
  1717.  
  1718.     FUNCTION
  1719.         Finds a public semaphore added to the system semaphore list by
  1720.         AddSemaphore. This is the mirror function to exec/FindSemaphore.
  1721.  
  1722.     INPUTS
  1723.         _PowerPCBase - base of powerpc.library
  1724.         SemaphoreName - name of the semaphore to find
  1725.  
  1726.     RESULT
  1727.         SignalsemaphorePPC - signal semaphore requested or 0 if it was not
  1728.                              found
  1729.  
  1730.     SEE ALSO
  1731.         InitSemaphorePPC, FreeSemaphorePPC, ObtainSemaphorePPC,
  1732.         AttemptSemaphorePPC, ReleaseSemaphorePPC, AddSemaphorePPC,
  1733.         RemSemaphorePPC, TrySemaphorePPC, powerpc/semaphoresPPC.i
  1734.  
  1735. powerpc.library/FindTagItemPPC                  powerpc.library/FindTagItemPPC
  1736.  
  1737.     NAME
  1738.         FindTagItemPPC - scan a tag list for a specific tag (V8)
  1739.  
  1740.     CPU
  1741.         PowerPC
  1742.  
  1743.     SYNOPSIS
  1744.         tag = FindTagItemPPC(_PowerPCBase, tagValue, tagList)
  1745.         r3                   r3            r4        r5
  1746.  
  1747.         struct TagItem *FindTagItemPPC(struct Library *, ULONG,
  1748.                                        struct TagItem *);
  1749.  
  1750.     FUNCTION
  1751.         Scans a tag list and returns a pointer to the first item with
  1752.         ti_Tag matching the 'tagValue' parameter. This is the mirror
  1753.         function of utility/FindTagItem.
  1754.  
  1755.     INPUTS
  1756.         _PowerPCBase - base of powerpc.library
  1757.         tagValue - tag value to search for
  1758.         tagList - tag item list to search (may be NULL)
  1759.  
  1760.     RESULT
  1761.         tag - a pointer to the item with ti_Tag matching 'tagValue'
  1762.               or NULL if no match was found.
  1763.  
  1764.     NOTES
  1765.         This function is safe to call from exception handlers.
  1766.  
  1767.     SEE ALSO
  1768.         GetTagDataPPC, NextTagItemPPC, utility/tagitem.i
  1769.  
  1770. powerpc.library/FindTaskByID                      powerpc.library/FindTaskByID
  1771.  
  1772.     NAME
  1773.         FindTaskByID - evaluates the task address for a given task ID (V14)
  1774.  
  1775.     CPU
  1776.         PowerPC
  1777.  
  1778.     SYNOPSIS
  1779.         TaskPPC = FindTaskByID(_PowerPCBase, taskID)
  1780.         r3                     r3            r4
  1781.  
  1782.         struct TaskPPC *FindTaskByID(struct Library *, ULONG);
  1783.  
  1784.     FUNCTION
  1785.         Evaluates the task address for a given task ID.
  1786.  
  1787.     INPUTS
  1788.         _PowerPCBase - base of powerpc.library
  1789.         taskID - the task's ID number
  1790.  
  1791.     RESULT
  1792.         TaskPPC - Pointer to the PPCTask structure
  1793.  
  1794.     SEE ALSO
  1795.         CreateTaskPPC,DeleteTaskPPC,powerpc/tasksPPC.i
  1796.  
  1797. powerpc.library/FindTaskPPC                    powerpc.library/FindTaskPPC
  1798.  
  1799.     NAME
  1800.         FindTaskPPC - finds a task by name (or find oneself) (V8)
  1801.  
  1802.     CPU
  1803.         PowerPC
  1804.  
  1805.     SYNOPSIS
  1806.         TaskPPC = FindTaskPPC(_PowerPCBase, Name)
  1807.         r3                    r3            r4
  1808.  
  1809.         struct TaskPPC *FindTaskPPC(struct Library *, STRPTR);
  1810.  
  1811.     FUNCTION
  1812.         Tries to find a task with the given name (or the current task if
  1813.         NULL is specified). This is the mirror function of exec/FindTask.
  1814.  
  1815.     INPUTS
  1816.         _PowerPCBase - base of powerpc.library
  1817.         Name - name of the task to find or NULL for the current task
  1818.  
  1819.     RESULT
  1820.         TaskPPC - pointer to the TaskPPC structure or NULL if the task
  1821.                   was not found
  1822.  
  1823.     NOTES
  1824.         Be cautious that a task may be removed at any time, so the
  1825.         pointer returned may not be valid anymore when used.
  1826.  
  1827.         It's allowed to call FindTaskPPC with a NULL parameter from
  1828.         an exception handler. In this case the interrupted task is
  1829.         returned.
  1830.  
  1831.     SEE ALSO
  1832.         CreateTaskPPC, DeleteTaskPPC, FindTaskByID, powerpc/tasksPPC.i
  1833.  
  1834. powerpc.library/FreeAllMem                          powerpc.library/FreeAllMem
  1835.  
  1836.     NAME
  1837.         FreeAllMem - frees all memory allocated by the calling task (V11)
  1838.  
  1839.     CPU
  1840.         PowerPC
  1841.  
  1842.     SYNOPSIS
  1843.         FreeAllMem(_PowerPCBase)
  1844.                    r3
  1845.  
  1846.         void FreeVecPPC(struct Library *);
  1847.  
  1848.     FUNCTION
  1849.         Frees all memory which was allocated by the calling task. This is an
  1850.         easy way to free the memory rather than calling FreeVecPPC for every
  1851.         allocation made.
  1852.  
  1853.     INPUTS
  1854.         _PowerPCBase - base of powerpc.library
  1855.  
  1856.     SEE ALSO
  1857.         AllocVecPPC,FreeVecPPC,powerpc/memoryPPC.i
  1858.  
  1859. powerpc.library/FreePooledPPC                    powerpc.library/FreePooledPPC
  1860.  
  1861.     NAME
  1862.         FreePooledPPC - free pooled memory (V15)
  1863.  
  1864.     CPU
  1865.         PowerPC
  1866.  
  1867.     SYNOPSIS
  1868.         FreePooledPPC(_PowerPCBase, poolheader, memory, size)
  1869.                       r3            r4          r5      r6
  1870.  
  1871.         void *FreePooledPPC(struct Library*, void *, void *,ULONG);
  1872.  
  1873.     FUNCTION
  1874.         Deallocates memory allocated by AllocPooledPPC. The size of the
  1875.         allocation *MUST* match the size given to AllocPooledPPC. Only
  1876.         memory allocated by AllocPooled may be freed with this function!
  1877.  
  1878.         This is the mirror function of exec/FreePooled. Refer to the
  1879.         documentation of exec/FreePooled for more infos.
  1880.  
  1881.     INPUTS
  1882.         _PowerPCBase - base of powerpc.library
  1883.         poolHeader - a specific private pool header.
  1884.         memory - pointer to the memory to be freed
  1885.         size - size of the memory allocation
  1886.  
  1887.     SEE ALSO
  1888.         FreeVecPPC, CreatePoolPPC, DeletePoolPPC, AllocPooledPPC
  1889.  
  1890.  
  1891. powerpc.library/FreeSemaphorePPC              powerpc.library/FreeSemaphorePPC
  1892.  
  1893.     NAME
  1894.         FreeSemaphorePPC - frees a signal semaphore (V8)
  1895.  
  1896.     CPU
  1897.         PowerPC
  1898.  
  1899.     SYNOPSIS
  1900.         FreeSemaphorePPC(_PowerPCBase, SignalSemaphorePPC)
  1901.                          r3            r4
  1902.  
  1903.         void FreeSemaphorePPC(struct Library *, struct SignalSemaphorePPC *);
  1904.  
  1905.     FUNCTION
  1906.         Frees a signal semaphore initialized by InitSemaphorePPC. There
  1907.         is no similar function in exec.library!
  1908.  
  1909.     INPUTS
  1910.         _PowerPCBase - base of powerpc.library
  1911.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  1912.  
  1913.     SEE ALSO
  1914.         InitSemaphorePPC, ObtainSemaphorePPC, AttemptSemaphorePPC,
  1915.         ReleaseSemaphorePPC, AddSemaphorePPC, RemSemaphorePPC,
  1916.         FindSemaphorePPC, TrySemaphorePPC, powerpc/semaphoresPPC.i
  1917.  
  1918. powerpc.library/FreeSignalPPC                    powerpc.library/FreeSignalPPC
  1919.  
  1920.     NAME
  1921.         FreeSignalPPC - frees a signal (V8)
  1922.  
  1923.     CPU
  1924.         PowerPC
  1925.  
  1926.     SYNOPSIS
  1927.         FreeSignalPPC(_PowerPCBase, signalNum)
  1928.                       r3            r4
  1929.  
  1930.         void FreeSignalPPC(struct Library *, LONG);
  1931.  
  1932.     FUNCTION
  1933.         Frees a signal bit allocated by AllocSignalPPC. This is the
  1934.         mirror function of exec/FreeSignal.
  1935.  
  1936.     INPUTS
  1937.         _PowerPCBase - base of powerpc.library
  1938.         signalNum - the signal bit number to free (0..31). It's
  1939.                     safe to pass -1 as input parameter.
  1940.  
  1941.     SEE ALSO
  1942.         AllocSignalPPC, SetSignalPPC, SignalPPC, WaitPPC
  1943.  
  1944. powerpc.library/FreeVecPPC                          powerpc.library/FreeVecPPC
  1945.  
  1946.     NAME
  1947.         FreeVecPPC - frees memory allocated by AllocVecPPC (V7)
  1948.  
  1949.     CPU
  1950.         PowerPC
  1951.  
  1952.     SYNOPSIS
  1953.         status = FreeVecPPC(_PowerPCBase, memblock)
  1954.         r3                  r3            r4
  1955.  
  1956.         LONG FreeVecPPC(struct Library *, void *);
  1957.  
  1958.     FUNCTION
  1959.         Frees memory allocated by AllocVecPPC. This is the mirror function
  1960.         of exec/FreeVec.
  1961.  
  1962.     INPUTS
  1963.         _PowerPCBase - base of powerpc.library
  1964.         memblock - address of memory to be freed. It's safe to pass NULL
  1965.                    as input parameter.
  1966.  
  1967.     RESULT
  1968.         status - a status value:
  1969.             MEMERR_SUCCESS - operation was successful
  1970.  
  1971.     NOTES
  1972.         It is absolutely required that no part of the freed memory is
  1973.         located in the 68K data cache! This is only important if your
  1974.         application is working asynchronously and shares data between
  1975.         independent 68K and PPC tasks. Otherwise (for standard synchron
  1976.         applications) it is guaranteed that the 68K data cache doesn't
  1977.         contain parts of the freed memory.
  1978.  
  1979.         The same rules also apply to the reverse case (free memory
  1980.         using exec/FreeVec).
  1981.  
  1982.         Please remember, that you should never free memory, which was
  1983.         allocated by another task. This would break on any operating
  1984.         system with memory protection and will also break with the
  1985.         V15 memory management system of WarpOS.
  1986.  
  1987.     SEE ALSO
  1988.         AllocVecPPC, FreeAllMem, powerpc/memoryPPC.i
  1989.  
  1990. powerpc.library/FreeXMsgPPC                        powerpc.library/FreeXMsgPPC
  1991.  
  1992.     NAME
  1993.         FreeXMsgPPC - frees a message allocated with 'AllocXMsgPPC' (V12)
  1994.  
  1995.     CPU
  1996.         PowerPC
  1997.  
  1998.     SYNOPSIS
  1999.         FreeXMsgPPC(_PowerPCBase, message)
  2000.                      r3           r4
  2001.  
  2002.         void FreeXMsgPPC(struct Library *, struct Message *);
  2003.  
  2004.     FUNCTION
  2005.         This function frees a memory allocated using 'AllocXMsgPPC'.
  2006.  
  2007.     INPUTS
  2008.         _PowerPCBase - base of powerpc.library
  2009.         message - a message allocated by 'AllocXMsgPPC'.
  2010.  
  2011.     NOTES
  2012.         There were some restrictions in earlier versions using
  2013.         FreeXMsgPPC. Since V14, a XMessage created by AllocXMsgPPC can be
  2014.         freed either by another PPC task (if the message isn't used
  2015.         anymore) or by a 68K task using FreeXMsg.
  2016.  
  2017.     SEE ALSO
  2018.         AllocXMsgPPC, PutXMsgPPC
  2019.  
  2020. powerpc.library/GetHALInfo                          powerpc.library/GetHALInfo
  2021.  
  2022.     NAME
  2023.         GetHALInfo - evaluates some HAL related information (V14)
  2024.  
  2025.     CPU
  2026.         PowerPC
  2027.  
  2028.     SYNOPSIS
  2029.         GetHALInfo(_PowerPCBase, HALInfoTagList)
  2030.                    r3            r4
  2031.  
  2032.         void GetHALInfo(struct Library *, struct TagItem *);
  2033.  
  2034.     FUNCTION
  2035.         This function is able to evaluate some information related to
  2036.         the WarpUp-HAL' status. The values which should be evaluated are
  2037.         specified using the appropriate tags (defined in powerpc/powerpc.i)
  2038.         and the value is returned in the appropriate ti_Data field.
  2039.  
  2040.     INPUTS
  2041.         _PowerPCBase - base of powerpc.library
  2042.         HALInfoTagList - pointer to a tagitem array. The following tags are
  2043.                          supported:
  2044.             HINFO_ALEXC_HIGH:   returns the high-longword of a 64-bit-value
  2045.                                 showing the number of emulated alignment
  2046.                                 exceptions since the PowerPC was reset.
  2047.             HINFO_ALEXC_LOW:    returns the low-longword of a 64-bit-value
  2048.                                 showing the number of emulated alignment
  2049.                                 exceptions since the PowerPC was reset.
  2050.  
  2051.     NOTES
  2052.         If the number of emulated alignment exceptions should be evaluated
  2053.         for specific tasks, you should use the tc_Switch/tc_Launch fields
  2054.         of the WarpOS task structure to keep track of task switches.
  2055.  
  2056.         This function is safe to call from exception handlers.
  2057.  
  2058.     SEE ALSO
  2059.         powerpc/powerpc.i
  2060.  
  2061. powerpc.library/GetInfo                                powerpc.library/GetInfo
  2062.  
  2063.     NAME
  2064.         GetInfo - evaluates many CPU related information (V10)
  2065.  
  2066.     CPU
  2067.         PowerPC
  2068.  
  2069.     SYNOPSIS
  2070.         GetInfo(_PowerPCBase, PPCInfoTagList)
  2071.                 r3            r4
  2072.  
  2073.         void GetInfo(struct Library *, struct TagItem *);
  2074.  
  2075.     FUNCTION
  2076.         This function is able to evaluate many CPU related information
  2077.         such as CPU type, cache states and more. The values which should
  2078.         be evaluated are specified using the appropriate tags (defined
  2079.         in powerpc/powerpc.i) and the value is returned in the appropriate
  2080.         ti_Data field.
  2081.  
  2082.     INPUTS
  2083.         _PowerPCBase - base of powerpc.library
  2084.         PPCInfoTagList - pointer to a tagitem array. The following tags are
  2085.                          supported:
  2086.             PPCINFO_CPU:        evaluates the PowerPC CPU type (see powerpc/
  2087.                                 powerpc.i for a description of the possible
  2088.                                 return values)
  2089.             PPCINFO_PVR:        returns the PVR register which also contains
  2090.                                 the revision number of the CPU besides the
  2091.                                 CPU type.
  2092.             PPCINFO_ICACHE:     returns the state of the instruction cache
  2093.                                 See powerpc/powerpc.i for a description of
  2094.                                 the possible values.
  2095.             PPCINFO_DCACHE:     returns the state of the data cache. The
  2096.                                 values possible are the same as for PPCINFO_
  2097.                                 ICACHE.
  2098.             PPCINFO_PAGETABLE:  returns the location of the standard page table
  2099.             PPCINFO_TABLESIZE:  returns the size of the page table (in KBytes)
  2100.             PPCINFO_BUSCLOCK:   returns the bus clock value (in Hz)
  2101.             PPCINFO_CPUCLOCK:   returns the CPU clock value (in Hz)
  2102.  
  2103.     NOTES
  2104.         The CPU clock cannot be evaluated on PowerPC systems without the
  2105.         extension E (for example PPC603,PPC604) because the supervisor
  2106.         register HID1 is missing. In this case, 0 is returned.
  2107.  
  2108.         Usually the PPC-CPU's available for AMIGA will have this register
  2109.         (for example: PPC603E, PPC604E)
  2110.  
  2111.     SEE ALSO
  2112.         powerpc/powerpc.i
  2113.  
  2114. powerpc.library/GetMsgPPC                            powerpc.library/GetMsgPPC
  2115.  
  2116.     NAME
  2117.         GetMsgPPC - get next message from a message port (V11)
  2118.  
  2119.     CPU
  2120.         PowerPC
  2121.  
  2122.     SYNOPSIS
  2123.         message = GetMsgPPC(_PowerPCBase, MsgPortPPC)
  2124.         r3                  r3            r4
  2125.  
  2126.         struct Message *GetMsgPPC(struct Library *, struct MsgPortPPC *);
  2127.  
  2128.     FUNCTION
  2129.         This function receives a message from a given message port. This
  2130.         is the mirror function of exec/GetMsg.
  2131.  
  2132.     INPUTS
  2133.         _PowerPCBase - base of powerpc.library
  2134.         port - a pointer to a message port
  2135.  
  2136.     RESULTS
  2137.         message - a pointer to the first available message or NULL if none
  2138.                   is available.
  2139.  
  2140.     SEE ALSO
  2141.         WaitPortPPC, PutMsgPPC, ReplyMsgPPC, powerpc/portsPPC.i
  2142.  
  2143. powerpc.library/GetSysTimePPC                    powerpc.library/GetSysTimePPC
  2144.  
  2145.     NAME
  2146.         GetSysTimePPC - get the current (relative) time (V7)
  2147.  
  2148.     CPU
  2149.         PowerPC
  2150.  
  2151.     SYNOPSIS
  2152.         GetSysTimePPC(_PowerPCBase, Dest )
  2153.                             r3      r4
  2154.  
  2155.         void GetSysTimePPC(struct Library *, struct timeval * );
  2156.  
  2157.     FUNCTION
  2158.         Returns the current system time. This time is NOT absolute, there
  2159.         is no relation between the real time and the time returned by
  2160.         GetSysTimePPC. This function can be used for measurement of
  2161.         time spans.
  2162.  
  2163.         This is the mirror function of timer/GetSysTime.
  2164.  
  2165.     INPUTS
  2166.         _PowerPCBase - base of powerpc.library
  2167.         Dest - pointer to a timeval structure (where the time is stored)
  2168.  
  2169.     NOTES
  2170.         This function has different behaviour on powerpc.library V7 and
  2171.         powerpc.library V8+.
  2172.  
  2173.         V7: The time is evaluated using the timer.device (via a cross
  2174.         call) because it isn't possible to evaluate the busclock frequency
  2175.         of the PPC with V7 (and ppc.library below) until now.
  2176.  
  2177.         V8+: The time is evaluated completely native (and fast) using the
  2178.         internal timers and the busclock frequency evaluated by WarpOS.
  2179.  
  2180.         This function is safe to call from exception handlers ONLY in
  2181.         powerpc.library V8 and higher !!
  2182.  
  2183.     SEE ALSO
  2184.         AddTimePPC, SubTimePPC, CmpTimePPC
  2185.  
  2186. powerpc.library/GetTagDataPPC                    powerpc.library/GetTagDataPPC
  2187.  
  2188.     NAME
  2189.         GetTagDataPPC - obtain the data corresponding to a tag (V8)
  2190.  
  2191.     CPU
  2192.         PowerPC
  2193.  
  2194.     SYNOPSIS
  2195.         value = GetTagDataPPC(_PowerPCBase, tagValue, defaultVal, tagList)
  2196.         r3                    r3            r4        r5          r6
  2197.  
  2198.         ULONG *GetTagDataPPC(struct Library *, ULONG, ULONG, struct TagItem* );
  2199.  
  2200.     FUNCTION
  2201.         Searches a tag list for a matching tag and returns the corresponding
  2202.         ti_Data value for the TagItem found. If no match is found,
  2203.         this function returns the value passed in as 'defaultVal'. This
  2204.         is the mirror function of utility/GetTagData.
  2205.  
  2206.     INPUTS
  2207.         _PowerPCBase - base of powerpc.library
  2208.         tagValue - tag value to search for
  2209.         defaultVal - value to be returned if tagValue is not found
  2210.         tagList - tag item list to search (may be NULL)
  2211.  
  2212.     RESULT
  2213.         value - the ti_Data value for the first matching TagItem, or
  2214.                 'defaultVal' if a ti_Tag matching Tag is not found.
  2215.  
  2216.     NOTES
  2217.         This function is safe to call from exception handlers.
  2218.  
  2219.     SEE ALSO
  2220.         FindTagItemPPC, NextTagItemPPC, utility/tagitem.i
  2221.  
  2222. powerpc.library/GetTaskByID                        powerpc.library/GetTaskByID
  2223.  
  2224.     NAME
  2225.         GetTaskByID - evaluates the task address for a given task ID (V14)
  2226.  
  2227.     CPU
  2228.         PowerPC
  2229.  
  2230.     SYNOPSIS
  2231.         TaskPPC = GetTaskByID(_PowerPCBase, taskID)
  2232.         r3                    r3            r4
  2233.  
  2234.         ULONG *GetTagDataPPC(struct Library *, ULONG, ULONG, struct TagItem* );
  2235.  
  2236.     FUNCTION
  2237.         Searches a tag list for a matching tag and returns the corresponding
  2238.         ti_Data value for the TagItem found. If no match is found,
  2239.         this function returns the value passed in as 'defaultVal'. This
  2240.         is the mirror function of utility/GetTagData.
  2241.  
  2242.     INPUTS
  2243.         _PowerPCBase - base of powerpc.library
  2244.         tagValue - tag value to search for
  2245.         defaultVal - value to be returned if tagValue is not found
  2246.         tagList - tag item list to search (may be NULL)
  2247.  
  2248.     RESULT
  2249.         value - the ti_Data value for the first matching TagItem, or
  2250.                 'defaultVal' if a ti_Tag matching Tag is not found.
  2251.  
  2252.     NOTES
  2253.         This function is safe to call from exception handlers.
  2254.  
  2255.     SEE ALSO
  2256.         FindTagItemPPC, NextTagItemPPC, utility/tagitem.i
  2257.  
  2258. powerpc.library/InitSemaphorePPC              powerpc.library/InitSemaphorePPC
  2259.  
  2260.     NAME
  2261.         InitSemaphorePPC - initializes a signal semaphore (V8)
  2262.  
  2263.     CPU
  2264.         PowerPC
  2265.  
  2266.     SYNOPSIS
  2267.         status = InitSemaphorePPC(_PowerPCBase, SignalSemaphorePPC)
  2268.         r3                        r3            r4
  2269.  
  2270.         LONG InitSemaphorePPC(struct Library *, struct SignalSemaphorePPC *);
  2271.  
  2272.     FUNCTION
  2273.         Initializes a signal semaphore. This is the mirror function of
  2274.         exec/InitSemaphore with some changes.
  2275.  
  2276.     INPUTS
  2277.         _PowerPCBase - base of powerpc.library
  2278.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  2279.                              (all fields to zero)
  2280.  
  2281.     RESULT
  2282.         status - status value:
  2283.             SSPPC_SUCCESS: function was successful
  2284.             SSPPC_NOMEM: function failed due to lack of memory
  2285.  
  2286.     NOTES
  2287.         In opposite to exec/InitSemaphore a signal semaphore for PPC
  2288.         has to be freed with FreeSemaphorePPC, because InitSemaphorePPC
  2289.         allocates memory which should be freed after use.
  2290.  
  2291.     SEE ALSO
  2292.         FreeSemaphorePPC, ObtainSemaphorePPC, AttemptSemaphorePPC,
  2293.         ReleaseSemaphorePPC, AddSemaphorePPC, RemSemaphorePPC,
  2294.         FindSemaphorePPC, TrySemaphorePPC, powerpc/semaphoresPPC.i
  2295.  
  2296. powerpc.library/InsertPPC                            powerpc.library/InsertPPC
  2297.  
  2298.     NAME
  2299.         InsertPPC - insert a node into a list (V8)
  2300.  
  2301.     CPU
  2302.         PowerPC
  2303.  
  2304.     SYNOPSIS
  2305.         Insert(_PowerPCBase, list, node, nodepredecessor)
  2306.                r3            r4    r5    r6
  2307.  
  2308.         void InsertPPC(struct Library *, struct List*, struct Node*,
  2309.                        struct Node*);
  2310.  
  2311.     FUNCTION
  2312.         Insert a node into an standard exec list. This is the mirror
  2313.         function of exec/Insert.
  2314.  
  2315.     INPUTS
  2316.         _PowerPCBase - base of powerpc.library (can be omitted)
  2317.         list - a pointer to the target list
  2318.         node - the node to insert
  2319.         nodepredecessor - the node after which to insert. If 0 is passed,
  2320.                           the node is inserted at the head of the list.
  2321.  
  2322.     NOTES
  2323.         This function is guaranteed to work correctly, if the PowerPCBase
  2324.         is not passed in r3.
  2325.  
  2326.         This function is safe to call from exception handlers.
  2327.  
  2328.     SEE ALSO
  2329.         AddHeadPPC, AddTailPPC, RemovePPC, RemHeadPPC, RemTailPPC,
  2330.         EnqueuePPC, FindNamePPC, NewListPPC, powerpc/listsPPC.i
  2331.  
  2332. powerpc.library/LockTaskList                      powerpc.library/LockTaskList
  2333.  
  2334.     NAME
  2335.         LockTaskList - locks a list of all tasks (V10)
  2336.  
  2337.     CPU
  2338.         PowerPC
  2339.  
  2340.     SYNOPSIS
  2341.         TaskPtr = LockTaskList(_PowerPCBase)
  2342.         r3                     r3
  2343.  
  2344.         struct TaskPtr* LockTaskList(struct Library *);
  2345.  
  2346.     FUNCTION
  2347.         This function locks a list of all PPC tasks currently available.
  2348.         The main purpose of this function is to allow examining the
  2349.         PPCtask structures without to worry about protecting the access
  2350.         by semaphores (this is done internally).
  2351.  
  2352.         The usual method of accessing the task information is the
  2353.         following:
  2354.  
  2355.         - Lock the task list using 'LockTaskList'
  2356.         - Get the pointer to the first task (by reading out the entry
  2357.           TASKPTR_TASK of the returned TaskPtr structure)
  2358.         - Scan trough the list and read out all infomation you need until
  2359.           you find the end of the list
  2360.         - Unlock the list using 'UnLockTaskList'
  2361.  
  2362.     INPUTS
  2363.         _PowerPCBase - base of powerpc.library
  2364.  
  2365.     RESULTS
  2366.         TaskPtr - Ptr to the first node of a list of TaskPtr structures
  2367.                   (see powerpc/tasksppc.i)
  2368.  
  2369.     NOTES
  2370.         The WarpOS multitasking is NOT halted between LockTaskList and
  2371.         UnLockTaskList.
  2372.  
  2373.         No new tasks are created and no resources of removed tasks are
  2374.         freed between LockTaskList and UnLockTaskList. So don't lock the
  2375.         list for a too long time.
  2376.  
  2377.     SEE ALSO
  2378.         UnLockTaskList, powerpc/tasksppc.i
  2379.  
  2380. powerpc.library/ModifyFPExc                        powerpc.library/ModifyFPExc
  2381.  
  2382.     NAME
  2383.         ModifyFPExc - enables/disables specific floating point exceptions (V9)
  2384.  
  2385.     CPU
  2386.         PowerPC
  2387.  
  2388.     SYNOPSIS
  2389.         ModifyFPExc(_PowerPCBase, FPflags)
  2390.                     r3            r4
  2391.  
  2392.         void ModifyFPExc(struct Library *, ULONG);
  2393.  
  2394.     FUNCTION
  2395.         This function allows to enable/disable particular floating
  2396.         point exceptions. Multiple exceptions can be affected
  2397.         simultaneously.
  2398.  
  2399.     INPUTS
  2400.         _PowerPCBase - base of powerpc.library
  2401.         FPflags - action to be performed:
  2402.             FPF_EN_OVERFLOW:    Enables FP overflow exception
  2403.             FPF_EN_UNDERFLOW:   Enables FP underflow exception
  2404.             FPF_EN_ZERODIVIDE:  Enables FP zero divide exception
  2405.             FPF_EN_INEXACT:     Enables FP inexact operation exception
  2406.             FPF_EN_INVALID:     Enables FP invalid operation exception
  2407.             FPF_DIS_OVERFLOW:   Disables FP overflow exception
  2408.             FPF_DIS_UNDERFLOW:  Disables FP underflow exception
  2409.             FPF_DIS_ZERODIVIDE: Disables FP zero divide exception
  2410.             FPF_DIS_INEXACT:    Disables FP inexact operation exception
  2411.             FPF_DIS_INVALID:    Disables FP invalid operation exception
  2412.  
  2413.     NOTES
  2414.         Floating point exceptions must be enabled globally using 'SetHardware'
  2415.         otherwise this function doesn't have any effect.
  2416.  
  2417.     SEE ALSO
  2418.         SetHardware, powerpc/powerpc.i
  2419.  
  2420. powerpc.library/NewListPPC                          powerpc.library/NewListPPC
  2421.  
  2422.     NAME
  2423.         NewListPPC - initialize an exec-style linked list (V15)
  2424.  
  2425.     CPU
  2426.         PowerPC
  2427.  
  2428.     SYNOPSIS
  2429.         NewListPPC(_PowerPCBase, list)
  2430.                    r3            r4
  2431.  
  2432.         void NewListPPC(struct Library *, struct List *);
  2433.  
  2434.     FUNCTION
  2435.         Initializes an exec-style linked-list
  2436.  
  2437.         This is the mirror function of amiga.lib/NewList
  2438.  
  2439.     INPUTS
  2440.         _PowerPCBase - base of powerpc.library
  2441.         list - the exec-style linked list to be initialized
  2442.  
  2443.     NOTES
  2444.         This function is safe to call from exception handlers.
  2445.  
  2446.     SEE ALSO
  2447.         InsertPPC, AddTailPPC, RemovePPC, RemHeadPPC, RemTailPPC,
  2448.         EnqueuePPC, FindNamePPC, AddHeadPPC, powerpc/listsPPC.i
  2449.  
  2450. powerpc.library/NextTagItemPPC                  powerpc.library/NextTagItemPPC
  2451.  
  2452.     NAME
  2453.         NextTagItemPPC - iterate through a tag list (V8)
  2454.  
  2455.     CPU
  2456.         PowerPC
  2457.  
  2458.     SYNOPSIS
  2459.         tag = NextTagItemPPC(_PowerPCBase, tagItemPtr)
  2460.         r3                   r3            r4
  2461.  
  2462.         struct TagItem *NextTagItemPPC(struct Library *, struct TagItem **);
  2463.  
  2464.     FUNCTION
  2465.         Iterates through a tag list, skipping and chaining as dictated by
  2466.         system tags. Each call returns either the next item to be examined
  2467.         or NULL when the end of the list has benn reached. This is the
  2468.         mirror function of utility/NextTagItem.
  2469.  
  2470.     INPUTS
  2471.         _PowerPCBase - base of powerpc.library
  2472.         tagItemPtr - double-indirect reference to a TagItem structure.
  2473.                      The pointer will be changed to keep track of the
  2474.                      iteration.
  2475.  
  2476.     RESULT
  2477.         tag - each TagItem in the array that should be processed is
  2478.               returned in turn with succesive calls.
  2479.  
  2480.     NOTES
  2481.         This function is safe to call from exception handlers.
  2482.  
  2483.     SEE ALSO
  2484.         FindTagItemPPC, GetTagDataPPC, utility/tagitem.i
  2485.  
  2486. powerpc.library/ObtainSemaphorePPC          powerpc.library/ObtainSemaphorePPC
  2487.  
  2488.     NAME
  2489.         ObtainSemaphorePPC - gain exclusive access to a semaphore (V8)
  2490.  
  2491.     CPU
  2492.         PowerPC
  2493.  
  2494.     SYNOPSIS
  2495.         ObtainSemaphorePPC(_PowerPCBase, SignalSemaphorePPC)
  2496.                            r3            r4
  2497.  
  2498.         void ObtainSemaphorePPC(struct Library *, struct SignalSemaphorePPC *);
  2499.  
  2500.     FUNCTION
  2501.         Tries to get exclusive access to a signal semaphore. If the semaphore
  2502.         is occupied, the task adds itself into a waiting queue. This is the
  2503.         mirror function of exec/ObtainSemaphore.
  2504.  
  2505.     INPUTS
  2506.         _PowerPCBase - base of powerpc.library
  2507.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  2508.  
  2509.     NOTES
  2510.         This call is guaranteed to preserve all GPR (except r0) and the CTR.
  2511.  
  2512.     SEE ALSO
  2513.         InitSemaphorePPC, FreeSemaphorePPC, AttemptSemaphorePPC,
  2514.         ReleaseSemaphorePPC, AddSemaphorePPC, RemSemaphorePPC
  2515.         FindSemaphorePPC, TrySemaphorePPC, powerpc/semaphoresPPC.i
  2516.  
  2517. powerpc.library/ObtainSemaphoreSharedPPC  powerpc.library/ObtainSemaphoreSharedPPC
  2518.  
  2519.     NAME
  2520.         ObtainSemaphoreSharedPPC - gain shared access to a semaphore (V15)
  2521.  
  2522.     CPU
  2523.         PowerPC
  2524.  
  2525.     SYNOPSIS
  2526.         ObtainSemaphoreSharedPPC(_PowerPCBase, SignalSemaphorePPC)
  2527.                                  r3            r4
  2528.  
  2529.         void ObtainSemaphoreSharedPPC(struct Library *,
  2530.                                       struct SignalSemaphorePPC *);
  2531.  
  2532.     FUNCTION
  2533.         Tries to get shared access to a signal semaphore. This is the mirror
  2534.         function of exec/ObtainSemaphoreShared. See the documentation
  2535.         of exec/ObtainSemaphoreShared for more infos.
  2536.  
  2537.     INPUTS
  2538.         _PowerPCBase - base of powerpc.library
  2539.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  2540.  
  2541.     NOTES
  2542.         This call is guaranteed to preserve all GPR (except r0) and the CTR.
  2543.  
  2544.     SEE ALSO
  2545.         ObtainSemaphorePPC, AttemptSemaphoreSharedPPC, powerpc/semaphoresPPC.i
  2546.  
  2547. powerpc.library/ProcurePPC                          powerpc.library/ProcurePPC
  2548.  
  2549.     NAME
  2550.         ProcurePPC - bid for a semaphore (V15)
  2551.  
  2552.     CPU
  2553.         PowerPC
  2554.  
  2555.     SYNOPSIS
  2556.         ProcurePPC(_PowerPCBase, SignalSemaphorePPC, SemaphoreMessage)
  2557.                    r3            r4                  r5
  2558.  
  2559.         void ProcurePPC(struct Library *,
  2560.                         struct SignalSemaphorePPC *, struct SemaphoreMessage *);
  2561.  
  2562.     FUNCTION
  2563.         Allows to obtain semaphores asynchronously and allows to wait
  2564.         for multiple semaphores at once. This is the mirror function of
  2565.         exec/Procure. See the documentation of exec/Procure for more
  2566.         infos.
  2567.  
  2568.         Note, that ProcurePPC is implemented according to exec V39/V40
  2569.         behaviour of Procure.
  2570.  
  2571.     INPUTS
  2572.         _PowerPCBase - base of powerpc.library
  2573.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  2574.         bidMessage- SemaphoreMessage that you wish replied when
  2575.                 you obtain access to the semaphore.  The message's
  2576.                 ssm_Semaphore field will point at the semaphore that
  2577.                 was obtained.  If the ssm_Semaphore field is NULL,
  2578.                 the Procure() was aborted via Vacate.
  2579.                 The mn_ReplyPort field of the message must point to
  2580.                 a valid message port.
  2581.                 To obtain a shared semaphore, the ln_Name field
  2582.                 must be set to 1.  For an exclusive lock, the ln_Name
  2583.                 field must be 0.  No other values are valid.
  2584.  
  2585.     SEE ALSO
  2586.         VacatePPC, powerpc/semaphoresPPC.i
  2587.  
  2588. powerpc.library/PutMsgPPC                            powerpc.library/PutMsgPPC
  2589.  
  2590.     NAME
  2591.         PutMsgPPC - put a message to a message port (V11)
  2592.  
  2593.     CPU
  2594.         PowerPC
  2595.  
  2596.     SYNOPSIS
  2597.         PutMsgPPC(_PowerPCBase, MsgPortPPC, message)
  2598.                   r3            r4          r5
  2599.  
  2600.         void PutMsgPPC(struct Library *, struct MsgPortPPC *, struct Messge *);
  2601.  
  2602.     FUNCTION
  2603.         This function attaces a message to the end of the given port. In
  2604.         opposition to exec/PutMsg, only ports with PA_SIGNAL are supported.
  2605.         This is the mirror function of exec/PutMsg.
  2606.  
  2607.     INPUTS
  2608.         _PowerPCBase - base of powerpc.library
  2609.         port - a pointer to a message port
  2610.         message - a pointer to the message to be sent
  2611.  
  2612.     NOTES
  2613.         This function is safe to call from exception handlers.
  2614.  
  2615.     SEE ALSO
  2616.         WaitPortPPC, GetMsgPPC, ReplyMsgPPC, powerpc/portsPPC.i
  2617.  
  2618. powerpc.library/PutXMsgPPC                          powerpc.library/PutXMsgPPC
  2619.  
  2620.     NAME
  2621.         PutXMsgPPC - sends an Inter-CPU message to a 68K task (V12)
  2622.  
  2623.     CPU
  2624.         PowerPC
  2625.  
  2626.     SYNOPSIS
  2627.         PutXMsgPPC(_PowerPCBase, MsgPort, message)
  2628.                    r3            r4       r5
  2629.  
  2630.         void PutXMsgPPC(struct Library *, struct MsgPort *, struct Message *);
  2631.  
  2632.     FUNCTION
  2633.         This function sends an Inter-CPU message allocated by 'AllocXMsgPPC'
  2634.         to a 68K task.
  2635.  
  2636.     INPUTS
  2637.         _PowerPCBase - base of powerpc.library
  2638.         MsgPort - an exec message port
  2639.         message - a message allocated by 'AllocXMsgPPC'.
  2640.  
  2641.     NOTES
  2642.         Inter-CPU must NOT be used for internal communication. They can
  2643.         only be used for communication between tasks on different processors.
  2644.  
  2645.         Inter-CPU messages get a different node type, if they are
  2646.         sent. If you want to filter out Reply-Messages from standard
  2647.         or Inter-CPU messages, compare the LN_TYPE field to NT_REPLYMSG.
  2648.         Replied Inter-CPU messages still get the same node type
  2649.         (NT_REPLYMSG). Any assumptions about the value of the new
  2650.         node type are ILLEGAL!!
  2651.  
  2652.         As soon as an Inter-CPU message is sent, the PPC looses ownership
  2653.         over the message. No access to the message is allowed until the
  2654.         reply has been arrived. If no replyport was specified, it's
  2655.         allowed to free the message, after it was read from the other side.
  2656.  
  2657.         Inter-CPU messages can be reused if they have been replied.
  2658.  
  2659.         Inter-CPU messages are read and replied using the standard
  2660.         message handling mechanisms (exec/WaitPort,exec/GetMsg,exec/ReplyMsg
  2661.         for 68K, powerpc/WaitPortPPC, powerpc/GetMsgPPC, powerpc/ReplyMsgPPC
  2662.         for PPC).
  2663.  
  2664.         The receiving task must NOT access message data, which are not
  2665.         explicitely located in the message body (for example data which is
  2666.         referenced by a pointer) unless both tasks care for the cache
  2667.         consistency. Only the message itself is flushed/invalidated
  2668.         automatically by the system.
  2669.  
  2670.         The receiving task may write to the message body of an Inter-CPU
  2671.         message.
  2672.  
  2673.     SEE ALSO
  2674.         AllocXMsgPPC, FreeXMsgPPC
  2675.  
  2676. powerpc.library/RawDoFmtPPC                        powerpc.library/RawDoFmtPPC
  2677.  
  2678.     NAME
  2679.         RawDoFmtPPC -- format data into a character stream (V15)
  2680.  
  2681.     CPU
  2682.         PowerPC
  2683.  
  2684.     SYNOPSIS
  2685.         NextData = RawDoFmtPPC(_PowerPCBase, FormatString, DataStream, PutChProc,
  2686.         r3                     r3            r4            r5          r6
  2687.                                PutChData)
  2688.                                r7
  2689.  
  2690.         APTR RawDoFmtPPC(struct Library*, STRPTR, APTR, void (*)(),APTR);
  2691.  
  2692.     FUNCTION
  2693.         perform "C"-language-like formatting of a data stream, outputting
  2694.         the result a character at a time. This function is the mirror function
  2695.         of exec/RawDoFmt, please refer to the appropriate documentation for
  2696.         more infos.
  2697.  
  2698.         Note, that RawDoFmtPPC provides some additional features, as
  2699.         described below when explaining the PutChProc parameter.
  2700.  
  2701.     INPUTS
  2702.         _PowerPCBase - base of powerpc.library
  2703.         FormatString - a "C"-language-like NULL terminated format string.
  2704.                        see exec/RawDoFmt for more infos.
  2705.         DataStream - a stream of data that is interpreted according to
  2706.                      the format string.
  2707.         PutChProc  - the procedure to call with each character to be
  2708.                      output, called as:
  2709.  
  2710.                      PutChData = PutChProc(PutChData, Char);
  2711.                      r3                    r3         r4
  2712.  
  2713.                      the procedure is called with a NULL Char at the end of
  2714.                      the format string.
  2715.  
  2716.                      RawDoFmtPPC provides the following advanced features,
  2717.                      which exec/RawDoFmt doesn't provide:
  2718.  
  2719.                      - if PutChProc is set to 0, then all characters are
  2720.                        printed to the buffer pointed to by the 'PutChData'
  2721.                        parameter.
  2722.                      - if PutChProc is set to 1, then this function does
  2723.                        nothing.
  2724.  
  2725.         PutChData - a value that is passed through to the PutChProc
  2726.                     procedure. Note, that this parameter has a
  2727.                     special meaning, if 'PutChProc' is set to 0.
  2728.  
  2729.     RESULT
  2730.         NextData - a pointer to the end of the DataStream (The next argument
  2731.         that would have been processed).  This allows multiple formatting
  2732.         passes to be made using the same data.
  2733.  
  2734. powerpc.library/ReleaseSemaphorePPC        powerpc.library/ReleaseSemaphorePPC
  2735.  
  2736.     NAME
  2737.         ReleaseSemaphorePPC - make signal semaphore available to others (V8)
  2738.  
  2739.     CPU
  2740.         PowerPC
  2741.  
  2742.     SYNOPSIS
  2743.         ReleaseSemaphorePPC(_PowerPCBase, SignalSemaphorePPC)
  2744.                             r3            r4
  2745.  
  2746.         void ReleaseSemaphorePPC(struct Library *,
  2747.                                  struct SignalSemaphorePPC *);
  2748.  
  2749.     FUNCTION
  2750.         Releases a semaphore locked by either ObtainSemaphorePPC or
  2751.         AttemptSemaphorePPC. If other tasks are waiting, the foremost
  2752.         in the waiting queue is waked up.
  2753.  
  2754.     INPUTS
  2755.         _PowerPCBase - base of powerpc.library
  2756.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  2757.  
  2758.     NOTES
  2759.         This call is guaranteed to preserve all GPR (except r0) and the CTR.
  2760.  
  2761.         If the semaphore is in an illegal state after calling
  2762.         ReleaseSemaphorePPC, a system message will appear and the task is
  2763.         put into waiting state.
  2764.  
  2765.     SEE ALSO
  2766.         InitSemaphorePPC, FreeSemaphorePPC, ObtainSemaphorePPC,
  2767.         AttemptSemaphorePPC, AddSemaphorePPC, RemSemaphorePPC
  2768.         FindSemaphorePPC, TrySemaphorePPC, powerpc/semaphoresPPC.i
  2769.  
  2770. powerpc.library/RemExcHandler                    powerpc.library/RemExcHandler
  2771.  
  2772.     NAME
  2773.         RemExcHandler - removes a custom exception handler (V9)
  2774.  
  2775.     CPU
  2776.         PowerPC
  2777.  
  2778.     SYNOPSIS
  2779.         RemExcHandler(_PowerPCBase, XLock)
  2780.                       r3            r4
  2781.  
  2782.         void RemExcHandler(struct Library *, void *);
  2783.  
  2784.     FUNCTION
  2785.         Removes an exception handler inserted by the function SetExcHandler.
  2786.  
  2787.     INPUTS
  2788.         _PowerPCBase - base of powerpc.library
  2789.         XLock - The lock value returned by SetExcHandler. It's safe to pass
  2790.                 NULL as parameter
  2791.  
  2792.     SEE ALSO
  2793.         RemExcHandler, powerpc/powerpc.i
  2794.  
  2795. powerpc.library/RemHeadPPC                          powerpc.library/RemHeadPPC
  2796.  
  2797.     NAME
  2798.         RemHeadPPC - removes the head node from a list (V8)
  2799.  
  2800.     CPU
  2801.         PowerPC
  2802.  
  2803.     SYNOPSIS
  2804.         node = RemHeadPPC(_PowerPCBase, list)
  2805.         r3                r3            r4
  2806.  
  2807.         struct Node *RemHeadPPC(struct Library *, struct List*);
  2808.  
  2809.     FUNCTION
  2810.         Removes the head node of a list. This is the mirror function of
  2811.         exec/RemHead.
  2812.  
  2813.     INPUTS
  2814.         _PowerPCBase - base of powerpc.library (can be omitted)
  2815.         list - the target list from which the head node should be removed
  2816.  
  2817.     RESULT
  2818.         node - the node removed or 0 if the list was empty
  2819.  
  2820.     NOTES
  2821.         This function is guaranteed to work correctly, if the PowerPCBase
  2822.         is not passed in r3.
  2823.  
  2824.         Assembler programmers may use the macro _REMHEAD located in
  2825.         'powerpc/listsPPC.i'
  2826.  
  2827.         This function is safe to call from exception handlers.
  2828.  
  2829.     SEE ALSO
  2830.         InsertPPC, AddTailPPC, AddHeadPPC, RemovePPC, RemTailPPC,
  2831.         EnqueuePPC, FindNamePPC, NewListPPC, powerpc/listsPPC.i
  2832.  
  2833. powerpc.library/RemovePPC                            powerpc.library/RemovePPC
  2834.  
  2835.     NAME
  2836.         RemovePPC - removes a node from a list (V8)
  2837.  
  2838.     CPU
  2839.         PowerPC
  2840.  
  2841.     SYNOPSIS
  2842.         RemovePPC(_PowerPCBase, node)
  2843.                    r3           r4
  2844.  
  2845.         void RemovePPC(struct Library *, struct Node*);
  2846.  
  2847.     FUNCTION
  2848.         Removes a node from whatever list it is in. This is the mirror
  2849.         function of exec/Remove.
  2850.  
  2851.     INPUTS
  2852.         _PowerPCBase - base of powerpc.library (can be omitted)
  2853.         node - the node to remove
  2854.  
  2855.     NOTES
  2856.         This function is guaranteed to work correctly, if the PowerPCBase
  2857.         is not passed in r3.
  2858.  
  2859.         Assembler programmers may use the macro _REMOVE located in
  2860.         'powerpc/listsPPC.i'
  2861.  
  2862.         This function is safe to call from exception handlers.
  2863.  
  2864.     SEE ALSO
  2865.         InsertPPC, AddTailPPC, AddHeadPPC, RemHeadPPC, RemTailPPC,
  2866.         EnqueuePPC, FindNamePPC, NewListPPC, powerpc/listsPPC.i
  2867.  
  2868. powerpc.library/RemPortPPC                          powerpc.library/RemPortPPC
  2869.  
  2870.     NAME
  2871.         RemPortPPC - removes a public PPC message port from the system (V11)
  2872.  
  2873.     CPU
  2874.         PowerPC
  2875.  
  2876.     SYNOPSIS
  2877.         RemPortPPC(_PowerPCBase, MsgPortPPC)
  2878.                    r3            r4
  2879.  
  2880.         void RemPortPPC(struct Library *, struct MsgPortPPC *);
  2881.  
  2882.     FUNCTION
  2883.         This function removes a public message port from the global list
  2884.         of message ports. It is the mirror function of exec/RemPort.
  2885.  
  2886.     INPUTS
  2887.         _PowerPCBase - base of powerpc.library
  2888.         MsgPortPPC - pointer to a PPC message port. It's safe to pass a NULL
  2889.                      parameter.
  2890.  
  2891.     SEE ALSO
  2892.         CreateMsgPortPPC,DeleteMsgPortPPC,FindPortPPC,AddPortPPC
  2893.         powerpc/portsPPC.i
  2894.  
  2895. powerpc.library/RemTailPPC                          powerpc.library/RemTailPPC
  2896.  
  2897.     NAME
  2898.         RemTailPPC - removes the tail node from a list (V8)
  2899.  
  2900.     CPU
  2901.         PowerPC
  2902.  
  2903.     SYNOPSIS
  2904.         node = RemTailPPC(_PowerPCBase, list)
  2905.         r3                r3            r4
  2906.  
  2907.         struct Node *RemTailPPC(struct Library *, struct List*);
  2908.  
  2909.     FUNCTION
  2910.         Removes the tail node of a list. This is the mirror function of
  2911.         exec/RemTail.
  2912.  
  2913.     INPUTS
  2914.         _PowerPCBase - base of powerpc.library (can be omitted)
  2915.         list - the target list from which the tail node should be removed
  2916.  
  2917.     RESULT
  2918.         node - the node removed or 0 if the list was empty
  2919.  
  2920.     NOTES
  2921.         This function is guaranteed to work correctly, if the PowerPCBase
  2922.         is not passed in r3.
  2923.  
  2924.         Assembler programmers may use the macro _REMTAIL located in
  2925.         'powerpc/listsPPC.i'
  2926.  
  2927.         This function is safe to call from exception handlers.
  2928.  
  2929.     SEE ALSO
  2930.         InsertPPC, AddTailPPC, AddHeadPPC, RemovePPC, RemHeadPPC,
  2931.         EnqueuePPC, FindNamePPC, NewListPPC, powerpc/listsPPC.i
  2932.  
  2933. powerpc.library/RemSemaphorePPC                powerpc.library/RemSemaphorePPC
  2934.  
  2935.     NAME
  2936.         RemSemaphorePPC - removes a global signal semaphore (V8)
  2937.  
  2938.     CPU
  2939.         PowerPC
  2940.  
  2941.     SYNOPSIS
  2942.         RemSemaphorePPC(_PowerPCBase, SignalSemaphorePPC)
  2943.                         r3            r4
  2944.  
  2945.         void RemSemaphorePPC(struct Library *, struct SignalSemaphorePPC *);
  2946.  
  2947.     FUNCTION
  2948.         Removes a global signal semaphore created by AddSemaphorePPC. This
  2949.         is the mirror function of exec/RemSemaphore.
  2950.  
  2951.     INPUTS
  2952.         _PowerPCBase - base of powerpc.library
  2953.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  2954.  
  2955.     SEE ALSO
  2956.         InitSemaphorePPC, FreeSemaphorePPC, ObtainSemaphorePPC,
  2957.         AttemptSemaphorePPC, ReleaseSemaphorePPC, AddSemaphorePPC,
  2958.         FindSemaphorePPC, TrySemaphorePPC, powerpc/semaphoresPPC.i
  2959.  
  2960. powerpc.library/ReplyMsgPPC                        powerpc.library/ReplyMsgPPC
  2961.  
  2962.     NAME
  2963.         ReplyMsgPPC - put a message to its reply port (V11)
  2964.  
  2965.     CPU
  2966.         PowerPC
  2967.  
  2968.     SYNOPSIS
  2969.         ReplyMsgPPC(_PowerPCBase, message)
  2970.                     r3            r4
  2971.  
  2972.         void ReplyMsgPPC(struct Library *, struct Messge *);
  2973.  
  2974.     FUNCTION
  2975.         This function sends a message to its reply port, if one is present.
  2976.         This is the mirror function of exec/ReplyMsg.
  2977.  
  2978.     INPUTS
  2979.         _PowerPCBase - base of powerpc.library
  2980.         message - a pointer to the message to be replied
  2981.  
  2982.     NOTES
  2983.         This function is safe to call from exception handlers.
  2984.  
  2985.     SEE ALSO
  2986.         WaitPortPPC, PutMsgPPC, GetMsgPPC, powerpc/portsPPC.i
  2987.  
  2988. powerpc.library/Run68K                                  powerpc.library/Run68K
  2989.  
  2990.     NAME
  2991.         Run68K - runs a 680x0 function resp. AMIGA-OS library function (V7)
  2992.  
  2993.     CPU
  2994.         PowerPC
  2995.  
  2996.     SYNOPSIS
  2997.         status = Run68K(_PowerPCBase, PPStruct )
  2998.         r3              r3           r4
  2999.  
  3000.         LONG RunPPC (struct Library *, struct PowerPC *);
  3001.  
  3002.     FUNCTION
  3003.         Runs a 680x0 function or an AMIGA-OS library function. All registers
  3004.         can be transferred to 68K as well as parameters on stack. All cache
  3005.         management actions are handled automatically.
  3006.  
  3007.         All registers are transferred back from 68K after the 68K call
  3008.         is completed. They are stored in the PowerPC structure.
  3009.  
  3010.         See RunPPC for the register assignment.
  3011.  
  3012.     INPUTS
  3013.         _PowerPCBase - base of powerpc.library
  3014.         PPStruct - Pointer to an initialized PowerPC Structure
  3015.  
  3016.           PP_CODE       : Pointer to the 680x0 code resp. pointer to the
  3017.                           library base (if PP_OFFSET is not zero).
  3018.           PP_OFFSET     : Library offset or 0 if no library function is
  3019.                           called.
  3020.           PP_FLAGS      : Flags which can be ore'd together
  3021.           - PP[F/P]_ASYNC   : call 68K function asynchronely (PPC process
  3022.                               returns immediately)
  3023.           PP_STACKPTR   : Pointer to the arguments on the stack to be
  3024.                           transferred. The pointer must point to the top
  3025.                           of the calling process' stackframe. The stack area
  3026.                           to be transferred is located at offset 24 from this
  3027.                           position. If no arguments on stack should be
  3028.                           transferred, set this to zero.
  3029.           PP_STACKSIZE  : Size of the stack area to be transferred. If no
  3030.                           stack parameters should be transferred, set this
  3031.                           to zero.
  3032.           PP_REGS       : Array of longwords where the registers to be
  3033.                           transferred can be stored (d0-a6)
  3034.           PP_FREGS      : Array of quadwords (8 bytes) where the FP-registers
  3035.                           to be transferred can be stored (fp0-fp7)
  3036.  
  3037.     RESULT
  3038.         status - PPERR_SUCCESS if the call was successfully
  3039.                  PPERR_ASYNCERR if a synchrone 68K call was made after an
  3040.                                 asynchrone 68K call
  3041.  
  3042.     NOTES
  3043.         Calling a 68K function asynchronely is dangerous. Take care of
  3044.         possible cache conflicts. Avoid calling system functions as much
  3045.         as possible.
  3046.  
  3047.         If an asynchrone 68K call is done, the function WaitFor68K MUST be
  3048.         called ONCE after the call was done. No other 68K call is allowed
  3049.         for this PPC process after an asynchrone 68K call and before a call
  3050.         to WaitFor68K.
  3051.  
  3052.         If an asynchronely called 68K function performs a PPC call, the call
  3053.         is only performed when WaitFor68K is called by the PPC process. Note
  3054.         that the 68K mirror process is still connected to the calling PPC
  3055.         process.
  3056.  
  3057.         DON'T pass arguments on stack when calling a 68K function asynchronely.
  3058.         The stack is most likely to be trashed before it is copied to the 68K
  3059.         stack.
  3060.  
  3061.         Assembler programmers should use the macros RUN68K and
  3062.         RUN68K_XL located in the include file 'powerpc/powerpc.i'
  3063.  
  3064.     SEE ALSO
  3065.         WaitFor68K,powerpc/powerpc.i
  3066.  
  3067. powerpc.library/SetCache                              powerpc.library/SetCache
  3068.  
  3069.     NAME
  3070.         SetCache - cache manipulation function (V8)
  3071.  
  3072.     CPU
  3073.         PowerPC
  3074.  
  3075.     SYNOPSIS
  3076.         SetCache(_PowerPCBase, cacheflags, start, length)
  3077.                  r3            r4          r5     r6
  3078.  
  3079.         void SetCache(struct Library *, ULONG, void *, ULONG);
  3080.  
  3081.     FUNCTION
  3082.         This function offers many possibilities to affect the caches of
  3083.         the PPC. It performs the action defined by the cache flags. Only
  3084.         one action can be performed at the same time.
  3085.  
  3086.     INPUTS
  3087.         _PowerPCBase - base of powerpc.library
  3088.         cacheflags - action to be performed:
  3089.             CACHE_DCACHEOFF:    Data cache is disabled. The Cache is flushed
  3090.                                 automatically.
  3091.             CACHE_DCACHEON:     Data cache is enabled.
  3092.             CACHE_DCACHELOCK:   Data cache is locked (is ignored if either
  3093.                                 'start' or 'length' is zero).
  3094.             CACHE_DCACHEUNLOCK: Data cache is unlocked.
  3095.             CACHE_DCACHEFLUSH:  Data cache is flushed.
  3096.             CACHE_ICACHEOFF:    Instruction cache is disabled.
  3097.             CACHE_ICACHEON:     Instruction cache is enabled.
  3098.             CACHE_ICACHELOCK:   Instruction cache is locked.
  3099.             CACHE_ICACHEUNLOCK: Instruction cache is unlocked.
  3100.             CACHE_ICACHEINV:    Instruction cache is invalidated.
  3101.             CACHE_DCACHEINV:    Data cache is invalidated (V15)
  3102.  
  3103.         start - pointer to the start address of the area to be affected.
  3104.                 The following cacheflags support an area specification:
  3105.                 CACHE_DCACHELOCK, CACHE_DCACHEFLUSH, CACHE_ICACHEINV,
  3106.                 CACHE_DCACHEINV
  3107.  
  3108.                 if 'start' is 0 the whole address space is affected
  3109.  
  3110.         length - length of the area to be affected (see above for the
  3111.                  cache flags which support area specification).
  3112.                  if 'length' is 0 the whole address space is affected
  3113.  
  3114.     NOTES
  3115.         Invalidating the whole instruction cache is much more efficient
  3116.         than flushing only a part of it.
  3117.  
  3118.         Flushing the whole data cache is less efficient than flushing
  3119.         a specific area, if this area is not too large.
  3120.  
  3121.         The cacheflag DCACHELOCK requires 'start' and 'length' to be not
  3122.         zero. The area specified is then copied into the data cache and
  3123.         the data cache is locked afterwards.
  3124.  
  3125.         The caches should not be switched on/off resp. locked/unlocked
  3126.         without GOOD justification. Global manipulations of the cache
  3127.         should be avoided. Better affect the cache locally by using
  3128.         AllocVecPPC.
  3129.  
  3130.         Never use CACHE_DCACHEINV, except if you are completely aware of
  3131.         the consequences of your doing.
  3132.  
  3133.         This function is safe to call from exception handlers
  3134.  
  3135.     SEE ALSO
  3136.         powerpc/powerpc.i
  3137.  
  3138. powerpc.library/SetExceptPPC                      powerpc.library/SetExceptPPC
  3139.  
  3140.     NAME
  3141.         SetExceptPPC -- define certain signals to cause exceptions (V15)
  3142.  
  3143.     CPU
  3144.         PowerPC
  3145.  
  3146.     SYNOPSIS
  3147.         oldSignals = SetExceptPPC(_PowerPCBase, newSignals, signalMask, flag)
  3148.         r3                        r3            r4          r5          r6
  3149.  
  3150.         ULONG SetExceptPPC(struct Library*, ULONG, ULONG, ULONG);
  3151.  
  3152.     FUNCTION
  3153.         This function defines which of the task's signals will cause a
  3154.         private task exception.  When any of the signals occurs the task's
  3155.         exception handler will be dispatched.  If the signal occurred prior
  3156.         to calling SetExcept, the exception will happen immediately.
  3157.  
  3158.         The user function pointed to by the task's tc_ExceptCode gets
  3159.         called as:
  3160.  
  3161.             newExcptSet = <exceptCode>(signals, exceptData)
  3162.             r3                         r3       r2
  3163.  
  3164.             signals - The set of signals that caused this exception.  These
  3165.                 Signals have been disabled from the current set of signals
  3166.                 that can cause an exception.
  3167.  
  3168.             exceptData - A copy of the task structure tc_ExceptData field,
  3169.                          if the parameter 'flag' is set to 0. Otherwise the
  3170.                          calling task's r2 content is passed in 'exceptData'.
  3171.  
  3172.             newExcptSet - The set of signals in NewExceptSet will be re-
  3173.                 enabled for exception generation.  Usually this will be the
  3174.                 same as the Signals that caused the exception.
  3175.  
  3176.         This is the mirror function of exec/SetExcept.
  3177.  
  3178.         Important: There are some differences between exec/SetExcept and
  3179.         powerpc/SetExceptPPC:
  3180.  
  3181.         -  SetExceptPPC knows an additional flag parameter, which allows
  3182.            to pass the calling task's r2 to the exception in r2.
  3183.         -  The exception handler is executed in exception context, in
  3184.            supervisor mode, in contrary to the 68K handlers, which are
  3185.            executed in normal user mode.
  3186.  
  3187.     INPUTS
  3188.         _PowerPCBase - base of powerpc.library
  3189.         newSignals - the new values for the signals specified in signalMask.
  3190.         signalMask - the set of signals to be effected
  3191.         flag - if 0, then the value of tc_ExceptData is passed in r2 to the
  3192.                exception handler. Otherwise the calling task's r2 is passed
  3193.                in r2 to the exception handler, which allows the handler
  3194.                to access the calling task's variables.
  3195.  
  3196.     RESULTS
  3197.         oldSignals - the prior exception signals
  3198.  
  3199.     NOTES
  3200.         The task's exception handler is executed in a PPC exception context,
  3201.         in supervisor mode. All restrictions, which are valid for PPC
  3202.         exception handlers added using SetExcHandler, are also valid for
  3203.         the exception handler referenced by tc_ExceptCode.
  3204.  
  3205.     SEE ALSO
  3206.         SetExcHandler
  3207.  
  3208. powerpc.library/SetExcHandler                    powerpc.library/SetExcHandler
  3209.  
  3210.     NAME
  3211.         SetExcHandler - insert a custom exception handler (V9)
  3212.  
  3213.     CPU
  3214.         PowerPC
  3215.  
  3216.     SYNOPSIS
  3217.         XLock = SetExcHandler(_PowerPCBase, ExcTags)
  3218.         r3                    r3            r4
  3219.  
  3220.         void *SetExcHandler(struct Library *, struct TagItem *);
  3221.  
  3222.     FUNCTION
  3223.         This function allows applications to insert custom exception
  3224.         handlers. Those handlers can be global or task dependant,
  3225.         priorities are also supported. Multiple exceptions can be
  3226.         selected for one exception handler.
  3227.  
  3228.         The exception handlers are executed in supervisor mode and
  3229.         have access to all supervisor registers.
  3230.  
  3231.         The handlers are called in one of two possible ways (dependant
  3232.         of the tag EXC_FLAGS):
  3233.  
  3234.         1) EXC_FLAGS has the flag EXCF_SMALLCONTEXT set:
  3235.  
  3236.  
  3237.            Status = CustomHandler(SmallContext)
  3238.            r3                     r3
  3239.  
  3240.            ULONG CustomHandler(struct XCONTEXT*)
  3241.  
  3242.            Inputs:
  3243.                 SmallContext - a pointer to a XCONTEXT structure (see
  3244.                                powerpc/powerpc.i)
  3245.  
  3246.            Result:
  3247.                 Status - a return value which decides, whether the
  3248.                          exception should be leaved immediately or
  3249.                          if following exception handlers should be
  3250.                          executed, too (see powerpc/powerpc.i)
  3251.  
  3252.  
  3253.           In this first method, the handler gets all registers directly,
  3254.           except for r3, which is passed in the XCONTEXT structure. The
  3255.           exception ID, which gives information about the kind of
  3256.           exception occurred, is passed also in XCONTEXT structure.
  3257.  
  3258.           All registers which are modified by the exception handler are
  3259.           also modified for the interrupted task. If r3 should be modified
  3260.           for the interrupted task, the appropriate field of the XCONTEXT
  3261.           structure has to be modified.
  3262.  
  3263.           Some of the interrupted task's registers are passed in special
  3264.           supervisor registers. If they should be changed, the appropriate
  3265.           supervisor registers have to be changed:
  3266.  
  3267.           SPRG1 -       The interrupted task's Link Register
  3268.           SPRG2 -       The interrupted task's Stackpointer (r1)
  3269.           SPRG3 -       The interrupted task's Smalldata Base (r2)
  3270.  
  3271.           The exception stack, which is passed in r1, is allocated from the
  3272.           user stack of the interrupted task.
  3273.  
  3274.  
  3275.         2) EXC_FLAGS has the flag EXCF_LARGECONTEXT set:
  3276.  
  3277.  
  3278.            Status = CustomHandler(LargeContext)
  3279.            r3                     r3
  3280.  
  3281.            ULONG CustomHandler(struct EXCCONTEXT*)
  3282.  
  3283.            Inputs:
  3284.                 LargeContext - a pointer to a EXCCONTEXT structure (see
  3285.                                powerpc/powerpc.i)
  3286.  
  3287.            Result:
  3288.                 Status - a return value which decides, whether the
  3289.                          exception should be leaved immediately or
  3290.                          if following exception handlers should be
  3291.                          executed, too (see powerpc/powerpc.i)
  3292.  
  3293.           In this second method, the handler gets all registers in the
  3294.           EXCCONTEXT structure. If the handler wishes to change some
  3295.           of the register contents it must change the appropriate fields
  3296.           in the EXCCONTEXT structure which are copied back to the
  3297.           registers after the custom handler has completed. If no
  3298.           field is provided for a certain register, it has to be modified
  3299.           directly.
  3300.  
  3301.           The exception stack, which is passed in r1, is allocated from the
  3302.           user stack of the interrupted task.
  3303.  
  3304.     INPUTS
  3305.         _PowerPCBase - base of powerpc.library
  3306.         ExcTags - pointer to a tagitem array. The following tags are
  3307.                   supported:
  3308.  
  3309.             EXCATTR_CODE:       pointer to the exception handler code
  3310.                                 (required)
  3311.             EXCATTR_DATA:       a user data which is passed in r2 to the
  3312.                                 custom exception handler. This is usually
  3313.                                 a base register which provides access to
  3314.                                 all global data required.
  3315.             EXCATTR_TASK:       specifies the task which is allowed to take
  3316.                                 the exception handler. If this tag is 0 or
  3317.                                 omitted, the current task is taken instead.
  3318.                                 This tag has no effect if the exception
  3319.                                 handler is specified as global (see below
  3320.                                 at EXCATTR_FLAGS)
  3321.             EXCATTR_EXCID:      Defines which exceptions should call this
  3322.                                 exception handler. See powerpc/powerpc.i
  3323.                                 for a description of all supported exceptions.
  3324.                                 Multiple exceptions can be selected.
  3325.             EXCATTR_FLAGS:
  3326.                 EXCF_GLOBAL:       Marks the exception handler as global. It
  3327.                                    is then called for every exception occurred.
  3328.                 EXCF_LOCAL:        Marks the exception handler as local. It is
  3329.                                    then only called, if the interrupted task
  3330.                                    matches the task specified in EXCATTR_TASK.
  3331.                 EXCF_SMALLCONTEXT: The exception handler is called with a
  3332.                                    XCONTEXT structure as parameter (see above
  3333.                                    for a description of this mode).
  3334.                 EXCF_LARGECONTEXT: The exception handler is called with a
  3335.                                    EXCCONTEXT structure as parameter (see above
  3336.                                    for a description of this mode).
  3337.  
  3338.                                 One flag of EXCF_GLOBAL and EXCF_LOCAL and one
  3339.                                 flag of EXCF_SMALLCONTEXT and EXCF_LARGECONTEXT
  3340.                                 must be specified, otherwise this function
  3341.                                 fails.
  3342.  
  3343.             EXCATTR_NAME:       An identification name for this handler
  3344.             EXCATTR_PRI:        The priority of this exception handler
  3345.  
  3346.     RESULT
  3347.         XLock - A lock to be passed to RemExcHandler or 0 if something
  3348.                 failed.
  3349.  
  3350.     NOTES
  3351.         Exception handlers should generally take care that they don't
  3352.         destroy any registers of the interrupted task except if it is
  3353.         desired. Special care must be taken if the exception handler is
  3354.         called with the small context structure (take care of r0!). All
  3355.         registers, inclusive CR, CTR, LR and others must be restored if
  3356.         they should not be changed.
  3357.  
  3358.         IMPORTANT: The exception handler is called with MMU switched off!
  3359.         The whole address space is accessed in cachable copyback mode, so
  3360.         no access to critical locations such as custom chip space must
  3361.         be performed. If such locations should be accessed, a temporary
  3362.         MMU setup must be done using the library functions 'SetExcMMU'
  3363.         and 'ClearExcMMU' (V10)
  3364.  
  3365.         Note that changes to the MSR of the interrupted task must be done
  3366.         by writing to SRR1 (i.e. setting the trace bit).
  3367.  
  3368.         Note that exception handlers should generally not call system
  3369.         functions with some exceptions (for example 'SignalPPC' is often
  3370.         useful to call from exception handlers). System functions must not
  3371.         be called unless it's allowed explicitely by the documentation of
  3372.         each function.
  3373.  
  3374.         Note that the content of the program counter (SRR0) differs depending
  3375.         on the exception type. Sometimes it contains the address of the
  3376.         excepting instruction and sometimes the address of the next
  3377.         instruction to complete. Exception handlers must take care about
  3378.         this and should set the program counter appropriately.
  3379.         Here follows a table of all supported exceptions and their behaviour:
  3380.  
  3381.         Machine check (EXCF_MCHECK):        PC -> maybe next instruction
  3382.         Data access (EXCF_DACCESS):         PC -> excepting instruction
  3383.         Instruction access (EXCF_IACCESS):  PC -> next instruction
  3384.         Alignment (EXCF_ALIGN):             PC -> excepting instruction
  3385.         Program (EXCF_PROGRAM):             PC -> excepting instruction
  3386.         FP unavailable (EXCF_FPUN):         PC -> excepting instruction
  3387.         Trace (EXCF_TRACE):                 PC -> next instruction
  3388.         Performance Monitor (EXCF_PERFMON): unknown
  3389.         Instruction breakpoint (EXCF_IABR): PC -> excepting instruction
  3390.  
  3391.         New for V15:
  3392.         External interrupt (EXCF_INTERRUPT):PC -> next instruction
  3393.  
  3394.         Exception handlers for the external interrupt are only called
  3395.         for interrupts invoked by powerpc/CauseInterrupt or
  3396.         powerpc/CausePPCInterrupt.
  3397.  
  3398.         Exception handlers should not waste stack space. The system
  3399.         allocates an extra space for this purpose but it may not be
  3400.         sufficient if very stack-intensive routines are called as
  3401.         exception handlers.
  3402.  
  3403.         If every exception handler returns the state EXCRETURN_NORMAL
  3404.         then the standard WarpOS exception handler is executed (except
  3405.         for Trace- and PerformanceMonitor-Exceptions).
  3406.  
  3407.         If exception handlers are written to emulate commands causing
  3408.         an exception they should return EXCRETURN_ABORT as return value
  3409.         to suppress following exception handlers which might output
  3410.         some alert messages. The priority should be probably high enough
  3411.         to ensure that no unwanted reactions occur.
  3412.  
  3413.         The WarpOS debugging system is disabled during exception
  3414.         processing.
  3415.  
  3416.         It's completely ILLEGAL to exit an exception handler by an RFI
  3417.         instruction!! It's also illegal to trash SPRG0!
  3418.  
  3419.     SEE ALSO
  3420.         RemExcHandler, powerpc/powerpc.i
  3421.  
  3422. powerpc.library/SetExcMMU                            powerpc.library/SetExcMMU
  3423.  
  3424.     NAME
  3425.         SetExcMMU - installs a BAT based MMU setup for exception handlers (V10)
  3426.  
  3427.     CPU
  3428.         PowerPC
  3429.  
  3430.     SYNOPSIS
  3431.         SetExcMMU(_PowerPCBase)
  3432.                   r3
  3433.  
  3434.         void SetExcMMU(struct Library *);
  3435.  
  3436.     FUNCTION
  3437.         This function is for exception handlers only. It installs a new
  3438.         temporary MMU setup which allows exception handlers to access critical
  3439.         address space, such as custom chip space. Exception handlers are
  3440.         normally run with MMU switched off to avoid problems on systems
  3441.         without hardware tablesearch.
  3442.  
  3443.         The new MMU setup is based on the BAT registers.
  3444.  
  3445.         The function 'ClearExcMMU' restores the old MMU state and should
  3446.         be called at the end of the exception handler.
  3447.  
  3448.  
  3449.     INPUTS
  3450.         _PowerPCBase - base of powerpc.library
  3451.  
  3452.     NOTES
  3453.         This function must not be called from anywhere else than from
  3454.         an exception handler.
  3455.  
  3456.     SEE ALSO
  3457.         ClearExcMMU
  3458.  
  3459. powerpc.library/SetHardware                        powerpc.library/SetHardware
  3460.  
  3461.     NAME
  3462.         SetHardware - hardware manipulation function (V9)
  3463.  
  3464.     CPU
  3465.         PowerPC
  3466.  
  3467.     SYNOPSIS
  3468.         Status = SetHardware(_PowerPCBase, hardwareflags, parameter)
  3469.                              r3            r4             r5
  3470.  
  3471.         ULONG SetHardware(struct Library *, ULONG, void *);
  3472.  
  3473.     FUNCTION
  3474.         This function offers some functions to access the PPC hardware.
  3475.  
  3476.     INPUTS
  3477.         _PowerPCBase - base of powerpc.library
  3478.         hardwareflags - action to be performed:
  3479.             HW_TRACEON:         Enables trace mode for the current task
  3480.             HW_TRACEOFF:        Disables trace mode for the current task
  3481.             HW_BRANCHTRACEON:   Enables branch trace mode for the current task
  3482.             HW_BRANCHTRACEOFF:  Disables branch trace mode for the current task
  3483.             HW_FPEXCON:         Enables the floating point exceptions for the
  3484.                                 current task
  3485.             HW_FPEXCOFF:        Disables the floating point exceptions for the
  3486.                                 current task
  3487.             HW_SETIBREAK:       Sets the global instruction breakpoint
  3488.             HW_CLEARIBREAK:     Clears the global instruction breakpoint
  3489.             HW_SETDBREAK:       Sets the global data breakpoint
  3490.             HW_CLEARDBREAK:     Clears the global data breakpoint
  3491.  
  3492.         parameter - additional parameter only used if a breakpoint should be
  3493.                     set. Then it contains the breakpoint address.
  3494.  
  3495.     RESULT
  3496.         Status - HW_AVAILABLE: The requested feature is available on this CPU
  3497.                  HW_NOTAVAILABLE: The requested feature is not available on
  3498.                                   this CPU
  3499.  
  3500.     NOTES
  3501.         Floating point exceptions are only enabled globally with HW_FPEXCON.
  3502.         It's necessary to call 'ModifyFPExc' to enable the desired floating
  3503.         point exceptions.
  3504.  
  3505.         Floating point exceptions should not be enabled by standard
  3506.         applications. They are intended to use for debugging purposes.
  3507.  
  3508.         The data breakpoint feature is not available on PPC603[E].
  3509.  
  3510.     SEE ALSO
  3511.         ModifyFPExc, powerpc/powerpc.i
  3512.  
  3513. powerpc.library/SetNiceValue                      powerpc.library/SetNiceValue
  3514.  
  3515.     NAME
  3516.         SetNiceValue - sets the NICE value of a task (V14)
  3517.  
  3518.     CPU
  3519.         PowerPC
  3520.  
  3521.     SYNOPSIS
  3522.         OldNice = SetNiceValue(_PowerPCBase, TaskPPC, Nice)
  3523.         r3                     r3            r4       r5
  3524.  
  3525.         LONG* SetNiceValue(struct Library *, struct TaskPPC *, LONG);
  3526.  
  3527.     FUNCTION
  3528.         This function can be used to set the NICE value of a task. The
  3529.         NICE value is a kind of priority, which replaces the old priority
  3530.         in LN_PRI. NICE values were introduced with the dynamic scheduler
  3531.         which works very differently than the old scheduler.
  3532.  
  3533.         If a task gets a high NICE value, it means that the task is nice
  3534.         to other tasks and won't request much CPU time. If a task gets
  3535.         a low NICE value, the opposite occurs. Using NICE values it is
  3536.         possible to affect execution speed of tasks.
  3537.  
  3538.     INPUTS
  3539.         _PowerPCBase - base of powerpc.library
  3540.         TaskPPC - pointer to the task which should be affected
  3541.         Nice - the NICE value (-20 ... 20)
  3542.  
  3543.     RESULT
  3544.         The old NICE value
  3545.  
  3546.     SEE ALSO
  3547.         SetTaskPriPPC, powerpc/tasksPPC.i, powerpc/tasksPPC.h
  3548.  
  3549. powerpc.library/SetReplyPortPPC                powerpc.library/SetReplyPortPPC
  3550.  
  3551.     NAME
  3552.         SetReplyPortPPC - exchanges the reply port of a message (V13)
  3553.  
  3554.     CPU
  3555.         PowerPC
  3556.  
  3557.     SYNOPSIS
  3558.         OldPort = SetReplyPortPPC(_PowerPCBase, Message, MsgPortPPC)
  3559.         r3                        r3            r4       r5
  3560.  
  3561.         struct MsgPortPPC* SetReplyPortPPC(struct Library *,
  3562.                            struct Message *, struct MsgPortPPC *);
  3563.  
  3564.     FUNCTION
  3565.         This function exchanges the message port of a message. It
  3566.         can be used for internal PPC messages and for InterCPU
  3567.         messages.
  3568.  
  3569.     INPUTS
  3570.         _PowerPCBase - base of powerpc.library
  3571.         Message - a pointer to the message affected
  3572.         MsgPortPPC - a pointer to a PPC message port
  3573.  
  3574.     RESULT
  3575.         The old reply port, which was installed in the message.
  3576.         Can be NULL, of course.
  3577.  
  3578.     NOTES
  3579.         It's possible to specify NULL as MsgPort to remove the
  3580.         reply port.
  3581.  
  3582.         Don't poke into the message structure at MN_REPLYPORT,
  3583.         please use this function here.
  3584.  
  3585.     SEE ALSO
  3586.         WaitPortPPC, GetMsgPPC, ReplyMsgPPC, PutMsgPPC, powerpc/portsPPC.i
  3587.  
  3588. powerpc.library/SetScheduling                    powerpc.library/SetScheduling
  3589.  
  3590.     NAME
  3591.         SetScheduling - affects scheduling behaviour (V14)
  3592.  
  3593.     CPU
  3594.         PowerPC
  3595.  
  3596.     SYNOPSIS
  3597.         SetScheduling(_PowerPCBase, SchedTagList)
  3598.                       r3            r4
  3599.  
  3600.         void SetScheduling(struct Library *, struct TagItem *);
  3601.  
  3602.     FUNCTION
  3603.         This function is used to set some scheduling parameters.
  3604.  
  3605.     INPUTS
  3606.         _PowerPCBase - base of powerpc.library
  3607.         SchedTagList - pointer to a tagitem array. The following tags are
  3608.                        supported:
  3609.             SCHED_REACTION:     Sets the reaction time of low-activity tasks.
  3610.                                 This value can be in range of (1..20). The
  3611.                                 higher the value the more CPU time a
  3612.                                 low-activity task gets (but which causes
  3613.                                 longer blocking of busy tasks). Default is
  3614.                                 currently 6.
  3615.  
  3616.     NOTES
  3617.         This function is safe to call from exception handlers.
  3618.  
  3619.     SEE ALSO
  3620.         powerpc/powerpc.i
  3621.  
  3622. powerpc.library/SetSignalPPC                      powerpc.library/SetSignalPPC
  3623.  
  3624.     NAME
  3625.         SetSignalPPC - define the state of this task's signals (V8)
  3626.  
  3627.     CPU
  3628.         PowerPC
  3629.  
  3630.     SYNOPSIS
  3631.         oldSignals = SetSignalPPC(_PowerPCBase, newSignals, signalMask)
  3632.         r3                        r3            r4          r5
  3633.  
  3634.         ULONG SetSignalPPC(struct Library *, ULONG, ULONG);
  3635.  
  3636.     FUNCTION
  3637.         This function can query or modify the state of the current
  3638.         signals. This function is the mirror function of exec/SetSignal.
  3639.  
  3640.     INPUTS
  3641.         _PowerPCBase - base of powerpc.library
  3642.         newSignals - the new values for the signals
  3643.         signalMask - the set of signals to be affected.
  3644.  
  3645.     RESULT
  3646.         oldSignals - the prior values for all signals
  3647.  
  3648.     NOTES
  3649.         It's possible to check for the system signals (i.e. CTRL_C).
  3650.  
  3651.         Before V11, this only worked if the task was stated using
  3652.         RunPPC, this is not the case anymore.
  3653.  
  3654.     SEE ALSO
  3655.         AllocSignalPPC, FreeSignalPPC, SignalPPC, WaitPPC
  3656.  
  3657. powerpc.library/SetTaskPriPPC                    powerpc.library/SetTaskPriPPC
  3658.  
  3659.     NAME
  3660.         SetTaskPriPPC - get and set the priority of a task (V8)
  3661.  
  3662.     CPU
  3663.         PowerPC
  3664.  
  3665.     SYNOPSIS
  3666.         oldpriority = SetTaskPriPPC(_PowerPCBase, taskPPC, priority)
  3667.         r3                          r3            r4       r5
  3668.  
  3669.         LONG SetTaskPriPPC(struct Library *, struct TaskPPC *, LONG);
  3670.  
  3671.     FUNCTION
  3672.         This function changes the priority of a task regardless of its
  3673.         state. The old priority of the task is returned. A reschedule
  3674.         may be performed. This is the mirror function of exec/SetTaskPri.
  3675.  
  3676.         Important: These task priorities are completely useless from V14
  3677.         on because of the new dynamic scheduler which uses NICE values
  3678.         instead of fixed priorities. Use 'SetNiceValue' to give tasks
  3679.         more or less CPU time.
  3680.  
  3681.     INPUTS
  3682.         _PowerPCBase - base of powerpc.library
  3683.         taskPPC - task to be affected
  3684.         priority - the new priority for the task
  3685.  
  3686.     RESULT
  3687.         old priority - the tasks previous priority
  3688.  
  3689.     SEE ALSO
  3690.         SetNiceValue
  3691.  
  3692. powerpc.library/Signal68K                            powerpc.library/Signal68K
  3693.  
  3694.     NAME
  3695.         SignalPPC - signal a 68K task (V8)
  3696.  
  3697.     CPU
  3698.         PowerPC
  3699.  
  3700.     SYNOPSIS
  3701.         Signal68K(_PowerPCBase, task, signals)
  3702.                   r3            r4       r5
  3703.  
  3704.         void Signal68K(struct Library *, struct Task*, ULONG);
  3705.  
  3706.     FUNCTION
  3707.         This function signals a 68K task with the given signals. If
  3708.         the signalled task is sleeping, it's woken up and a reschedule
  3709.         may occur.
  3710.  
  3711.     INPUTS
  3712.         _PowerPCBase - base of powerpc.library
  3713.         task - the 68K task to be signalled
  3714.         signals - the signals to be sent
  3715.  
  3716. powerpc.library/SignalPPC                            powerpc.library/SignalPPC
  3717.  
  3718.     NAME
  3719.         SignalPPC - signal a task (V8)
  3720.  
  3721.     CPU
  3722.         PowerPC
  3723.  
  3724.     SYNOPSIS
  3725.         SignalPPC(_PowerPCBase, taskPPC, signals)
  3726.                   r3            r4       r5
  3727.  
  3728.         void SignalPPC(struct Library *, struct TaskPPC*, ULONG);
  3729.  
  3730.     FUNCTION
  3731.         This function signals a task with the given signals. If the
  3732.         signalled task is sleeping, it's woken up and a reschedule
  3733.         may occur. This is the mirror function of exec/Signal.
  3734.  
  3735.     INPUTS
  3736.         _PowerPCBase - base of powerpc.library
  3737.         taskPPC - the task to be signalled
  3738.         signals - the signals to be sent
  3739.  
  3740.     NOTES
  3741.         This function is safe to call from exception handlers.
  3742.  
  3743.         Since V11 it's possible to signal a 68K task directly
  3744.         with 'SignalPPC' and the 68K task structure in r4.
  3745.  
  3746.         Before V11, 'SignalPPC' only worked, if the PPC task
  3747.         had a mirror 68K task. Since V11, every PPC task has
  3748.         a mirror task, so 'SignalPPC' can always be used.
  3749.  
  3750.         Furthermore, all signals, which are sent to a task currently
  3751.         waiting for its mirror task to complete, are transferred
  3752.         automatically to the mirror task. In fact, the whole signal
  3753.         system is shared and can be viewed as one single 'virtual
  3754.         signaling system'. It really doesn't matter, on which CPU
  3755.         a program is running, the signals are always transferred to
  3756.         the currently active part.
  3757.  
  3758.         Important note: if signals are allocated/freed on one CPU,
  3759.         then the other one doesn't know about this until the next
  3760.         context switch. Therefore sending signals from i.e. the
  3761.         68K to the PPC, which has allocated a new signal recently
  3762.         using AllocSignalPPC without doing a context switch,
  3763.         doesn't work.
  3764.  
  3765.     SEE ALSO
  3766.         AllocSignalPPC, FreeSignalPPC, SetSignalPPC, WaitPPC
  3767.  
  3768. powerpc.library/SnoopTask                            powerpc.library/SnoopTask
  3769.  
  3770.     NAME
  3771.         SnoopTask - monitors beginning or end of a PPC task (V13)
  3772.  
  3773.     CPU
  3774.         PowerPC
  3775.  
  3776.     SYNOPSIS
  3777.         SnoopID = SnoopTask (_PowerPCBase, SnoopTags)
  3778.         r3                   r3            r4
  3779.  
  3780.         ULONG SnoopTask (struct Library *, struct TagItem *);
  3781.  
  3782.     FUNCTION
  3783.         This function allows to intall a callback job, which is executed
  3784.         when a new PPC task is started or when a PPC task is removed.
  3785.         This is useful for debuggers which want to be kept informed
  3786.         about new tasks installed into the system and about tasks removed
  3787.         from the system.
  3788.  
  3789.         The callback function has two different formats (prototypes),
  3790.         dependant on the type of callback:
  3791.  
  3792.         1. callback function for monitoring the beginning of a PPC task
  3793.            (SNOOP_TYPE = SNOOP_START)
  3794.  
  3795.            SYNOPSIS:
  3796.  
  3797.            CallbackFunction (PPCTask, EntryCode, CreatorTask, CreatorCPU)
  3798.                              r3       r4         r5           r6
  3799.  
  3800.            void CallbackFunction (struct TaskPPC *, APTR, struct Task *, ULONG);
  3801.  
  3802.            INPUTS:
  3803.            PPCTask - pointer to the new PPC task which is created
  3804.            EntryCode - pointer to the start code, which will be executed
  3805.                        by the new task
  3806.            CreatorTask - pointer to the task structure of the task, which
  3807.                          created the new PPC task. If the new task is created
  3808.                          due to a call of RunPPC from 68K side, then the
  3809.                          CreatorTask points to the 68K-Task-Structure. If
  3810.                          the PPC task was created by directly calling
  3811.                          'CreateTaskPPC', CreatorTask points to this PPC task.
  3812.            CreatorCPU - One of two possible values:
  3813.                         CREATOR_PPC : The new PPC task was created using
  3814.                                       'CreateTaskPPC' by a PPC task.
  3815.                         CREATOR_68K : The new PPC task was created using
  3816.                                       'RunPPC' by a 68K task.
  3817.  
  3818.  
  3819.         2. callback function for monitoring the end of a PPC task
  3820.            (SNOOP_TYPE = SNOOP_EXIT)
  3821.  
  3822.            SYNOPSIS:
  3823.  
  3824.            CallbackFunction (PPCTask)
  3825.                              r3
  3826.  
  3827.            void CallbackFunction (struct TaskPPC *);
  3828.  
  3829.            INPUTS:
  3830.            PPCTask - pointer to the PPC task which is removed. NEVER use
  3831.                      FindTaskPPC(NULL), because it's possible that a PPC
  3832.                      task is removed by another PPC task!
  3833.  
  3834.     INPUTS
  3835.         _PowerPCBase - base of powerpc.library
  3836.         TagItems - pointer to a tagitem array. The following tags are
  3837.                    supported:
  3838.  
  3839.             SNOOP_CODE:         pointer to the callback function which should
  3840.                                 be called, if a new PPC task is created or
  3841.                                 if a PPC task is removed.
  3842.             SNOOP_DATA:         custom data which passed in register r2.
  3843.                                 this will usually be the smalldata base of
  3844.                                 the task which wants to snoop other tasks
  3845.                                 to gain access to more data space.
  3846.             SNOOP_TYPE:         two possible values:
  3847.                                 SNOOP_START : The callback function is called
  3848.                                               when a new PPC task is created
  3849.                                 SNOOP_EXIT  : The callback function is called
  3850.                                               when a PPC task is removed
  3851.     RESULT
  3852.         SnoopID - An ID, which must be passed to EndSnoopTask, as soon as the
  3853.                   snooping action should be terminated. NULL, if an error
  3854.                   occurs.
  3855.  
  3856.     SEE ALSO
  3857.         EndSnoopTask
  3858.  
  3859. powerpc.library/SPrintF                                powerpc.library/SPrintF
  3860.  
  3861.     NAME
  3862.         SPrintF - prints a formatted string to the serial port (V7)
  3863.  
  3864.     CPU
  3865.         PowerPC
  3866.  
  3867.     SYNOPSIS
  3868.         SPrintF (_PowerPCBase, Formatstring, values )
  3869.                  r3             r4             r5
  3870.  
  3871.         void SPrintF (struct Library *, STRPTR, APTR);
  3872.  
  3873.     FUNCTION
  3874.         Prints a formatted string to the serial port using the AMIGA-OS
  3875.         functions 'exec/RawPutChar' and 'exec/RawDoFmt'. Can be used to add
  3876.         debugging features and to improve the maintenance of software.
  3877.  
  3878.     INPUTS
  3879.         _PowerPCBase - base of powerpc.library
  3880.         Formatstring - A C style string with % commands to indicate where
  3881.                        parameters have to be inserted (see 'exec/RawDoFmt'
  3882.                        for a detailed description of these commands).
  3883.         values - A pointer to an array of parameters to be inserted into
  3884.                  specified places in the string.
  3885.  
  3886.     SEE ALSO
  3887.         exec/RawDoFmt
  3888.  
  3889. powerpc.library/SubTimePPC                          powerpc.library/SubTimePPC
  3890.  
  3891.     NAME
  3892.         SubTimePPC - subtracts one time request from another (V7)
  3893.  
  3894.     CPU
  3895.         PowerPC
  3896.  
  3897.     SYNOPSIS
  3898.         SubTimePPC(_PowerPCBase, Dest, Source)
  3899.                    r3            r4    r5
  3900.  
  3901.         void SubTimePPC(struct Library *, struct timeval *, struct timeval *);
  3902.  
  3903.     FUNCTION
  3904.         This routine subtracts one timeval structure from another. The results
  3905.         are stored in the destination (Dest - Source -> Dest)
  3906.  
  3907.         This is the mirror function of timer/SubTime.
  3908.  
  3909.     INPUTS
  3910.         _PowerPCBase - base of powerpc.library
  3911.         Dest - pointer to a timeval structure
  3912.         Source - pointer to a timeval structure
  3913.  
  3914.     NOTES
  3915.         This function is safe to call from exception handlers
  3916.  
  3917.     SEE ALSO
  3918.         GetSysTimePPC, AddTimePPC, CmpTimePPC
  3919.  
  3920. powerpc.library/Super                                    powerpc.library/Super
  3921.  
  3922.     NAME
  3923.         Super - switch to supervisor mode (V9)
  3924.  
  3925.     CPU
  3926.         PowerPC
  3927.  
  3928.     SYNOPSIS
  3929.         SuperKey = Super(_PowerPCBase)
  3930.         r3               r3
  3931.  
  3932.         ULONG Super(struct Library *);
  3933.  
  3934.     FUNCTION
  3935.         This function changes the current task to supervisor mode.
  3936.  
  3937.     INPUTS
  3938.         _PowerPCBase - base of powerpc.library
  3939.  
  3940.     RESULT
  3941.         SuperKey - A key value which must be passed to 'User' to switch back
  3942.                    to user mode
  3943.  
  3944.     NOTES
  3945.         Applications should generally not enter supervisor mode. Check first
  3946.         if there exists a library function which gives you access to the
  3947.         supervisor resources required.
  3948.  
  3949.     SEE ALSO
  3950.         User
  3951.  
  3952. powerpc.library/TrySemaphorePPC                powerpc.library/TrySemaphorePPC
  3953.  
  3954.     NAME
  3955.         TrySemaphorePPC - gain exclusive access to a semaphore with timeout (V15)
  3956.  
  3957.     CPU
  3958.         PowerPC
  3959.  
  3960.     SYNOPSIS
  3961.         status = TrySemaphorePPC(_PowerPCBase, SignalSemaphorePPC, Timeout)
  3962.                                  r3            r4                  r5
  3963.  
  3964.         LONG TrySemaphorePPC(struct Library *,
  3965.                                 struct SignalSemaphorePPC *, ULONG);
  3966.  
  3967.     FUNCTION
  3968.         Tries to get exclusive access to a signal semaphore. If the semaphore
  3969.         is occupied, the task adds itself into a waiting queue. The task
  3970.         only waits for the amount of time given with the 'Timeout' parameter.
  3971.         If the semaphore couldn't be obtained during this time, the
  3972.         function returns.
  3973.  
  3974.     INPUTS
  3975.         _PowerPCBase - base of powerpc.library
  3976.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  3977.         Timeout - timeout value in microseconds
  3978.  
  3979.     RESULT
  3980.         status - status value:
  3981.             ATTEMPT_SUCCESS: operation successful
  3982.             ATTEMPT_FAILURE: semaphore couldn't be locked
  3983.  
  3984.     NOTES
  3985.         This call is guaranteed to preserve all GPR (except r0/r3)
  3986.         and the CTR.
  3987.  
  3988.     SEE ALSO
  3989.         InitSemaphorePPC, FreeSemaphorePPC, AttemptSemaphorePPC,
  3990.         ReleaseSemaphorePPC, AddSemaphorePPC, RemSemaphorePPC
  3991.         FindSemaphorePPC, ObtainSemaphorePPC, powerpc/semaphoresPPC.i
  3992.  
  3993. powerpc.library/UnLockTaskList                  powerpc.library/UnLockTaskList
  3994.  
  3995.     NAME
  3996.         UnLockTaskList - unlocks a list locked by LockTaskList (V10)
  3997.  
  3998.     CPU
  3999.         PowerPC
  4000.  
  4001.     SYNOPSIS
  4002.         UnLockTaskList(_PowerPCBase)
  4003.                        r3
  4004.  
  4005.         void UnLockTaskList(struct Library *);
  4006.  
  4007.     FUNCTION
  4008.         Unlocks the task list which was locked by LockTaskList
  4009.  
  4010.     INPUTS
  4011.         _PowerPCBase - base of powerpc.library
  4012.  
  4013.     SEE ALSO
  4014.         LockTaskList, powerpc/tasksppc.i
  4015.  
  4016. powerpc.library/User                                      powerpc.library/User
  4017.  
  4018.     NAME
  4019.         User - switch to user mode (V9)
  4020.  
  4021.     CPU
  4022.         PowerPC
  4023.  
  4024.     SYNOPSIS
  4025.         User(_PowerPCBase, SuperKey)
  4026.              r3            r4
  4027.  
  4028.         void User(struct Library *, ULONG);
  4029.  
  4030.     FUNCTION
  4031.         This function changes the current task to user mode.
  4032.  
  4033.     INPUTS
  4034.         _PowerPCBase - base of powerpc.library
  4035.         SuperKey - The return value of the matching call of 'Super'
  4036.  
  4037.     SEE ALSO
  4038.         Super
  4039.  
  4040. powerpc.library/VacatePPC                            powerpc.library/VacatePPC
  4041.  
  4042.     NAME
  4043.         VacatePPC - release a Semaphore obtained by ProcurePPC (V15)
  4044.  
  4045.     CPU
  4046.         PowerPC
  4047.  
  4048.     SYNOPSIS
  4049.         VacatePPC(_PowerPCBase, SignalSemaphorePPC, SemaphoreMessage)
  4050.                    r3            r4                  r5
  4051.  
  4052.         void VacatePPC(struct Library *,
  4053.                         struct SignalSemaphorePPC *, struct SemaphoreMessage *);
  4054.  
  4055.     FUNCTION
  4056.         This function is used to release semaphores obtained by ProcurePPC.
  4057.         Additionally a ProcurePPC request, which was not responded yet,
  4058.         can be cancelled this way. This is the mirror function of
  4059.         exec/Vacate. See the documentation of exec/Vacate for more
  4060.         infos.
  4061.  
  4062.         Note, that VacatePPC is implemented according to exec V39/V40
  4063.         behaviour of Vacate.
  4064.  
  4065.     INPUTS
  4066.         _PowerPCBase - base of powerpc.library
  4067.         SignalSemaphorePPC - pointer to a signalsemaphorePPC structure
  4068.         bidMessage- SemaphoreMessage that you wish to abort.
  4069.                 The message's ssm_Semaphore field will be cleared.
  4070.                 The message will be replied if it is still on the waiting
  4071.                 list.  If it is not on the waiting list, it is assumed
  4072.                 that the semaphore is owned and it will be released.
  4073.  
  4074.     SEE ALSO
  4075.         ProcurePPC, powerpc/semaphoresPPC.i
  4076.  
  4077. powerpc.library/WaitFor68K                          powerpc.library/WaitFor68K
  4078.  
  4079.     NAME
  4080.         WaitFor68K - waits for the completion of an asynchrone 68K call (V7)
  4081.  
  4082.     CPU
  4083.         PowerPC
  4084.  
  4085.     SYNOPSIS
  4086.         status = WaitFor68K(_PowerPCBase, PPStruct )
  4087.         r3                  r3             r4
  4088.  
  4089.         LONG WaitFor68K (struct Library *, struct PowerPC *);
  4090.  
  4091.     FUNCTION
  4092.         After an asynchrone 68K call was done (see Run68K) this function must
  4093.         be called to wait for the completion of the 68K function. All
  4094.         registers transferred to the PowerPC with Run68K are returned into the
  4095.         PowerPC Structure.
  4096.  
  4097.     INPUTS
  4098.         _PowerPCBase - base of powerpc.library
  4099.         PPStruct - Pointer to a PowerPC Structure (see Run68K for a description
  4100.                    of the elements). The structure has not to be initialized.
  4101.                    The structure must be transferred to hold the returned
  4102.                    registers by the 68K function.
  4103.  
  4104.     RESULT
  4105.         status - PPERR_SUCCESS if the call was successfully
  4106.                  PPERR_WAITERR if WaitFor68K is called after a synchrone 68K
  4107.                                call.
  4108.  
  4109.     NOTES
  4110.         Assembler programmers should use the macros WAITFOR68K and
  4111.         WAITFOR68K_XL located in the include file 'powerpc/powerpc.i'
  4112.  
  4113.     SEE ALSO
  4114.         Run68K,powerpc/powerpc.i
  4115.  
  4116. powerpc.library/WaitPortPPC                        powerpc.library/WaitPortPPC
  4117.  
  4118.     NAME
  4119.         WaitPortPPC - wait for a given port to be non-empty (V11)
  4120.  
  4121.     CPU
  4122.         PowerPC
  4123.  
  4124.     SYNOPSIS
  4125.         message = WaitPortPPC(_PowerPCBase, MsgPortPPC)
  4126.         r3                    r3            r4
  4127.  
  4128.         struct Message *WaitPortPPC(struct Library *, struct MsgPortPPC *);
  4129.  
  4130.     FUNCTION
  4131.         This function waits until the given port becomes non-empty. The
  4132.         first message in the port is returned without removing it from
  4133.         the port. This is the mirror function of exec/WaitPort.
  4134.  
  4135.     INPUTS
  4136.         _PowerPCBase - base of powerpc.library
  4137.         port - a pointer to a message port
  4138.  
  4139.     RESULTS
  4140.         message - a pointer to the first available message
  4141.  
  4142.     SEE ALSO
  4143.         PutMsgPPC, GetMsgPPC, ReplyMsgPPC, powerpc/portsPPC.i
  4144.  
  4145. powerpc.library/WaitPPC                                powerpc.library/WaitPPC
  4146.  
  4147.     NAME
  4148.         WaitPPC - wait for one or more signals (V8)
  4149.  
  4150.     CPU
  4151.         PowerPC
  4152.  
  4153.     SYNOPSIS
  4154.         signals = WaitPPC(_PowerPCBase, signalSet)
  4155.         r3                r3            r4
  4156.  
  4157.         ULONG WaitPPC(struct Library *, ULONG);
  4158.  
  4159.     FUNCTION
  4160.         This function attempts to wait for the given signals. If at
  4161.         least one of these signal is already set, the task returns
  4162.         immediately, otherwise it changes to waiting state. This is
  4163.         the mirror function of exec/Wait.
  4164.  
  4165.     INPUTS
  4166.         _PowerPCBase - base of powerpc.library
  4167.         signalSet - the set of signals for which to wait
  4168.  
  4169.     RESULTS
  4170.         signals - the signals which were received
  4171.  
  4172.     NOTES
  4173.         Since V11 it's possible to wait for signals which might
  4174.         be sent by 68K tasks (and maybe only to the mirror 68K
  4175.         task of this PPC task here). Calling exec/Signal with a
  4176.         PPC task structure as first argument will work, too.
  4177.         See the desription of 'SignalPPC' for more information
  4178.         about the shared signaling system.
  4179.  
  4180.     SEE ALSO
  4181.         AllocSignalPPC, FreeSignalPPC, SetSignalPPC, SignalPPC
  4182.  
  4183. powerpc.library/WaitTime                              powerpc.library/WaitTime
  4184.  
  4185.     NAME
  4186.         WaitTime - wait for a given time or for given signals (V10)
  4187.  
  4188.     CPU
  4189.         PowerPC
  4190.  
  4191.     SYNOPSIS
  4192.         signals = WaitTime(_PowerPCBase, signalSet, time)
  4193.         r3                 r3            r4         r5
  4194.  
  4195.         ULONG WaitTime(struct Library *, ULONG, ULONG);
  4196.  
  4197.     FUNCTION
  4198.         This function attempts to wait for a specific time of for
  4199.         given signals. This function acts just like 'WaitPPC' with
  4200.         the difference that the task returns when the time specified
  4201.         is over.
  4202.  
  4203.     INPUTS
  4204.         _PowerPCBase - base of powerpc.library
  4205.         signalSet - the set of signals for which to wait (can be 0
  4206.                     if the task should only wait for a given time)
  4207.         time - the time in microseconds to wait
  4208.  
  4209.     RESULTS
  4210.         signals - the signals which were received (if this value is 0,
  4211.                   then the time is up).
  4212.  
  4213.     NOTES
  4214.         The time which explicitly passes between calling 'WaitTime' and
  4215.         returning from it can vary dependant of current system state. If
  4216.         many tasks are active, the time can be delayed. Furthermore the
  4217.         overhead of this function must be taken in account.
  4218.  
  4219.     SEE ALSO
  4220.         WaitPPC
  4221.  
  4222.  
  4223.